home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1993 November / JCSM Shareware Collection - 1993-11.iso / cl720 / comgrapj.lzh / CGREF.DOC < prev    next >
Text File  |  1993-06-12  |  141KB  |  3,159 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.                            CommonGraphics TM
  22.  
  23.                           Programmer's Guide
  24.  
  25.                              Version 2.2
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.                            Rialto Software
  36.                          4179 Woodland Drive
  37.                               Suite 15B
  38.                          Ann Arbor, MI 48103
  39.                             (313) 426-5295
  40.  
  41.                                    Copyright Notice
  42.  
  43.           Copyright 1992 by Rialto Software. All rights reserved worldwide.
  44.  
  45.  
  46.                                   License Agreement
  47.  
  48.           This software product and documentation is licensed by Rialto
  49.           Software to the original purchaser for use under the following
  50.           terms only: the software may only be used on a single computer at
  51.           a time; the software may be transferred from one computer to
  52.           another provided that the software is used on only one computer
  53.           at a time; copies of the software may be made for backup purposes
  54.           only. Copying, duplicating, selling or using the software or
  55.           documentation contrary to the terms in this license agreement is
  56.           not permitted.
  57.  
  58.           No part of this publication may be reproduced, transmitted,
  59.           transcribed, stored in a retrieval system, or translated into any
  60.           language or computer language, in any form or by any means
  61.           without the express written permission of Rialto Software 4179
  62.           Woodland Drive Suite 15B Ann Arbor MI 48103, (313) 426-5295.
  63.  
  64.  
  65.                                       Disclaimer
  66.  
  67.           THERE ARE NO WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING BUT NOT
  68.           LIMITED TO PERFORMANCE, MERCHANTABILITY, OR FITNESS FOR ANY
  69.           PARTICULAR PURPOSE, AND ALL SUCH WARRANTIES ARE EXPRESSLY AND
  70.           SPECIFICALLY DISCLAIMED. THE ENTIRE RISK AS TO THE RESULTS AND
  71.           PERFORMANCE OF THIS SOFTWARE IS ASSUMED BY THE CUSTOMER, EITHER
  72.           AS AN INDIVIDUAL OR COMPANY.
  73.  
  74.           Some states do not allow the limitation on implied warranties or
  75.           on how long they last, or the exclusion or limitation of
  76.           liability or consequential damages, so these limitations and
  77.           exclusions may not apply.
  78.  
  79.           No dealer, company or person is authorized to expand or alter
  80.           these warranties or this agreement. Any such representation will
  81.           not bind Rialto Software.
  82.  
  83.           Rialto Software reserves the right to revise this publication and
  84.           to make changes to the software without obligation to notify any
  85.           person of such revision or change. 
  86.  
  87.  
  88.                                       Trademarks
  89.  
  90.           CommonGraphics and the Rialto logo are trademarks of Rialto
  91.           Software.
  92.  
  93.           All other brand and product names are trademarks or registered
  94.           trademarks of their respective companies.
  95.  
  96.                                                             The Graphics Model
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.           Graphic Image Prsentation
  104.  
  105.                        CommonGraphics supports two coordinate systems: a
  106.                        World coordinate space over which all primitives
  107.                        are defined, and a Normalized Device Coordinate
  108.                        space which provides a level of independence
  109.                        between the application and the physical device.
  110.                        The application is never concerned about the
  111.                        coordinate system of the actual device.
  112.  
  113.                        Transformations are performed by CommonGraphics to
  114.                        transfer one coordinate system into another. The
  115.                        application is only responsible for defining the
  116.                        object in World Coordinate Space and the location
  117.                        on the physical device, in Normalized Device
  118.                        Coordinates, where the object is to be displayed.
  119.                        All characteristics of viewing, such as aspect
  120.                        ratio and screen resolution, are handled by
  121.                        CommonGraphics.
  122.  
  123.                 World Coordinate Space
  124.  
  125.                        The World Coordinate Space, or simply World Space,
  126.                        is a two-dimensional Cartesian coordinate space of
  127.                        theoretically infinite extent and precision.
  128.                        Locations in World Space are identified by the form
  129.                        (X, Y). At the center of World Space is the origin,
  130.                        or the (0, 0) coordinate. The X-axis and Y-axis run
  131.                        to infinity in the horizontal and vertical
  132.                        directions, respectively. In reality, World Space
  133.                        is limited by the precision of floating point
  134.                        numbers on the target hardware. Values to the right
  135.                        of the origin along the X-axis are represented by
  136.                        positive numbers, to the left by negative numbers.
  137.                        Values above the origin along the Y-axis are
  138.                        represented by positive numbers, below by negative numbers.
  139.  
  140.                        The application program uses primitive functions,
  141.                        such as DRAW LINE and DRAW CIRCLE, to create
  142.                        objects, or structures as they are formally
  143.                        referred as in CommonGraphics, in World Space. The
  144.                        units applied to the primitives are arbitrary. They
  145.                        can refer to miles or inches or millimeters or
  146.  
  147.                        whatever is appropriate for the particular object.
  148.                        All objects should be created using the same
  149.                        coordinate units.
  150.  
  151.                        The application has full control over which objects
  152.                        are displayed using views and windows (see the
  153.                        sections by the same name later in this chapter).
  154.                        Common objects can be defined based on the standard
  155.                        World Space origin and later moved, or transformed,
  156.                        to another location in the assembled object, which
  157.                        is then displayed.
  158.  
  159.                 Normalized Device Coordinate (NDC) Space
  160.  
  161.                        The Normalized Device Coordinate Space is a two-
  162.                        dimensional Cartesian coordinate space defined by
  163.                        the unit square bounded by the points (0, 0) and
  164.                        (1, 1). Normalized Device Coordinates are used by
  165.                        the application to refer to an area on the physical
  166.                        graphics device where the objects created in World
  167.                        Space are to be displayed. Using NDC Space, the
  168.                        application does not have to change when moving
  169.                        from device to device that have different physical
  170.                        characteristics. 
  171.  
  172.                        The NDC Space can be thought of as being overlaid
  173.                        on top of the physical graphic screen. Since most
  174.                        graphic screens are not perfectly square, a region
  175.                        of NDC Space will not be available to the
  176.                        application. After the CommonGraphics system is
  177.                        INITIALIZEd, the INQUIRE WORKSTATION function will
  178.                        return the actual size of NDC Space.
  179.  
  180.                        In Figure 3-2, the invisible portion of NDC Space
  181.                        is represented by the shaded region. The point
  182.                        defined by Aspect Ratio, which is returned from
  183.                        INQUIRE WORKSTATION, represents the maximum Y value
  184.                        that should be used when defining Views. All
  185.                        objects are clipped to the visible portion of NDC
  186.                        Space.
  187.  
  188.                 Views
  189.  
  190.                        Objects in World Space are displayed on the screen
  191.                        in an area referred to as a view. Other graphics
  192.                        standards or textbooks may refer to this region as
  193.                        a viewport. Views are used in conjunction with
  194.                        windows to display selected regions of World Space.
  195.                        Primitives are mapped from World Space into a view
  196.                        on the physical graphics device.
  197.  
  198.                        The OPEN VIEW function allows the application to
  199.                        specify this region of the screen in Normalized
  200.                        Device Coordinates, along with a background color
  201.                        and a border style. A view cannot be defined
  202.                        outside of the NDC range of the physical screen.
  203.                        For example, if the physical screen has a NDC Space
  204.                        range of (0.0, 0.0) to (1.0, 0.75), a view cannot
  205.                        be defined as (0.0, 0.0) to (1.0, 0.80). The
  206.                        application should always make view areas
  207.                        consistent with the NDC limits returned from
  208.                        INQUIRE WORKSTATION.
  209.  
  210.                        Multiple views may be defined and open at the same
  211.                        time. Refer to figure 3-3 in the following section
  212.                        titled Windows. Views may also be defined whose
  213.                        regions overlap with other views, however, these
  214.                        overlapping regions have restrictions when they are
  215.                        open at the same time. Refer to the discussion on
  216.                        OPEN VIEW in Chapter 5, Functions, for a list of
  217.                        these restrictions.
  218.  
  219.                        A view may be defined but not visible by using the
  220.                        CLOSE VIEW function. For example, a full screen
  221.                        view may be defined by the region (0.0, 0.0) to
  222.                        (1.0, 0.80), and 2 half-screen views may be defined
  223.                        with regions of (0.0, 0.0) to (0.5, 0.0) and (0.6,
  224.                        0.0) to (1.0, 0.80). These different views can be
  225.                        used or OPENed at different points in the
  226.                        application.
  227.  
  228.                        Since the NDC location for a view is specified each
  229.                        time the view is opened, the location of the view
  230.                        can be moved, enlarged or reduced each time the
  231.                        view is opened.
  232.  
  233.                        Objects are displayed in a view through the post
  234.                        and unpost functions. Each of these functions is
  235.                        discussed in more detail under Graphic Primitive
  236.                        Organization in this chapter.
  237.  
  238.                 Windows
  239.  
  240.                        Each view has an associated window that is a sub-
  241.                        region of the World Space for that view. The window
  242.                        is a roving rectangle whose size and position is
  243.                        controlled by the application. It is only the
  244.                        content of the window that is actually displayed in
  245.                        a view.
  246.  
  247.                        The portion of an object that lies outside of the
  248.                        window is temporarily removed or clipped when the
  249.                        object is displayed in the associated view.
  250.  
  251.                        The SET WINDOW function specifies the window by a
  252.                        length and height, with the initial center of the
  253.                        window being the origin or (0, 0) coordinate in World
  254.                        Space. The PAN function allows the window to be moved
  255.                        anywhere within the
  256.                        World Space by specifying a new center coordinate.
  257.                        The ZOOM function changes the length and height of
  258.                        the window so that either more or less of the
  259.                        object is contained within the view. The next
  260.                        section, titled Coordinate Space Transformation,
  261.                        shows how the size and location of the window
  262.                        determines the size and appearance of the displayed
  263.                        image.
  264.  
  265.                        Multiple views and windows can be used to display a
  266.                        different image of the same object from World
  267.                        Space. Figure 3-3 shows three views that contain
  268.                        the same image of the bicycle defined in World
  269.                        Space. The only difference between the images in
  270.                        the Views is the size and location of the Window in
  271.                        World Space which are controlled using the SET
  272.                        WINDOW, PAN and ZOOM functions.
  273.  
  274.                        Consider another example where an application has
  275.                        created four objects in World Space, each in a
  276.                        different quadrant. The objects could be displayed
  277.                        simultaneously by OPENing a single view with a
  278.                        window in World Space large enough to contain all
  279.                        four objects. They could also be displayed by
  280.                        OPENing four views, each with a window defined over
  281.                        a different quadrant.
  282.  
  283.                        Each view is initialized with a window of length
  284.                        100 units. The height will vary depending on the
  285.                        size of the view. However, this default window is
  286.                        adjusted to reflect the same aspect ratio as the
  287.                        associated view. Refer to the following section
  288.                        titled Window to View Size Relationship.
  289.  
  290.                 Coordinate Space Transformation
  291.  
  292.                        Objects from World Space are displayed in a view
  293.                        through a series of transformations. These are the
  294.                        actions that CommonGraphics takes to transform the
  295.                        image in World Space to the region associated with
  296.                        the view on the physical graphics device.
  297.  
  298.                        There are actually two transformations: mapping the
  299.                        window in World Space to the view and mapping the
  300.                        view to the physical graphics device. Both of these
  301.                        transformations are carried out by CommonGraphics
  302.                        and are totally transparent to the application.
  303.  
  304.                        The center of the window in World Space is
  305.                        transformed to the center of the view.
  306.  
  307.                 Window to view size relationship
  308.  
  309.                        When any view control function is applied to the
  310.                        window of a view, the resultant window may not
  311.                        match the relative proportion of the view. The
  312.                        relationship between the height and width of such a
  313.                        rectangular region is referred to as the aspect
  314.                        ratio. A rectangle whose vertical height is 75
  315.                        units and whose horizontal length is 100 units has
  316.                        an aspect ratio of 0.75.
  317.  
  318.                        Windows are always maintained with the same aspect
  319.                        ratio as the view to which they are applied. The
  320.                        aspect ratio of a view does not have to match the
  321.                        aspect ratio of the physical graphics device, but
  322.                        remember, CommonGraphics will not allow a view to
  323.                        be OPENed that is defined outside of the NDC Space
  324.                        for the particular device. If the size of a window
  325.                        needs to be adjusted, CommonGraphics always adjusts
  326.                        the window such that more viewing range is provided
  327.                        than was originally requested, never less.
  328.  
  329.                        If SET WINDOW is used to define a window with a
  330.                        length of 10 units and a height of 7 units for a
  331.                        view whose aspect ratio is 0.5, CommonGraphics will
  332.                        automatically adjust the length of the window to 14
  333.                        units to match the aspect ratio of the view. If the
  334.                        same window is defined, but with a height of 4
  335.                        units, the height is adjusted to 8 units to match
  336.                        the aspect ratio of the view. Both examples show
  337.                        that more of object is always displayed. Without
  338.                        this automatic adjustment, objects would be
  339.                        incorrectly scaled as they were transformed to the
  340.                        view.
  341.  
  342.                        After each view control function, the INQUIRE VIEW
  343.                        TRANSFORMATION function can be used to find the
  344.                        exact window boundaries.
  345.  
  346.           Primitives
  347.  
  348.                        Primitives are the basic entities upon which more
  349.                        complex objects are constructed. Primitives are
  350.                        defined using the geometric functions provided by
  351.                        CommonGraphics. Objects are created as either a
  352.                        single primitive or by assembling a series of
  353.                        primitives in World Space. The actual appearance of
  354.                        the primitive is determined by: the associated
  355.                        primitive attributes, described in the following
  356.                        section, titled Primitive Attributes, and the size
  357.                        of the window and view in which the primitive is
  358.                        drawn.
  359.  
  360.                        CommonGraphics supports the following primitive
  361.                        functions: DRAW ARC, DRAW ARROW, DRAW BSPLINE, DRAW
  362.                        CIRCLE, DRAW ELLIPSE, DRAW MARKER, DRAW LINE, DRAW
  363.                        POLYLINE, DRAW RECTANGLE and DRAW TEXT. Arguments
  364.                        to these functions include World Space coordinates
  365.                        and values. A circle, for example, is assembled in
  366.                        World Space by a center point and a radius.
  367.  
  368.  
  369.            Primitive attributes
  370.  
  371.                        Each primitive has an associated set of image
  372.                        characteristics that define how the primitive is to
  373.                        appear on the screen. These include color, style,
  374.                        line thickness and a number to identify each
  375.                        primitive or series of primitives. A circle, for
  376.                        example, can be drawn as a RED, DASHED line. The
  377.                        same circle could have been drawn using a SOLID
  378.                        line. These characteristics are the attributes of
  379.                        the primitive.
  380.  
  381.                        CommonGraphics supports the following primitive
  382.                        attribute functions: SET LINE COLOR, SET LINE
  383.                        STYLE, SET LINE WIDTH, SET INTERIOR STYLE, SET TEXT
  384.                        COLOR and SET ELEMENT IDENTIFIER.
  385.  
  386.                        Attributes are defined globally over all views,
  387.                        windows and objects. As calls are made to the
  388.                        attribute functions, SET LINE COLOR or SET LINE
  389.                        STYLE, for example, CommonGraphics remembers this
  390.                        new value and applies it to each new primitive.
  391.                        Changes to attributes do not effect the appearance
  392.                        of any primitive that previously existed.
  393.  
  394.                        Not all of these attributes apply to each of the
  395.                        primitives. Circles have color, use a particular
  396.                        line style to represent the circumference, and can
  397.                        be filled with a specified interior style. Lines do
  398.                        not have an interior and, therefore, cannot be
  399.                        filled. CommonGraphics uses only those attributes
  400.                        that apply to the primitive. Refer to the
  401.                        appropriate section in Chapter 5, Functions, for a
  402.                        further discussion of the individual primitive and
  403.                        the attributes used by each.
  404.  
  405.                        The range of attributes varies widely across
  406.                        different graphic devices. For example, intelligent
  407.                        graphic devices typically support hardware
  408.                        generated line styles, interior fill styles, etc.,
  409.                        while less intelligent devices only support line
  410.                        drawing. The attributes supplied with
  411.                        CommonGraphics define the minimum set of attributes
  412.                        that are supported. If a graphic device does not
  413.                        support this minimum set, the attribute is
  414.                        simulated by CommonGraphics. For example, if one of
  415.                        the minimum line styles is not supported by the
  416.                        physical device, the style is drawn by
  417.                        CommonGraphics using a series of line segments.
  418.                        This simulation will not use one primitive to
  419.                        simulate another. Line styles will not be used to
  420.                        simulate missing colors, for example.
  421.  
  422.           Graphic Primitive Organization
  423.  
  424.                        Many applications need the ability to take basic
  425.                        primitives and construct high-level objects. These
  426.                        objects can then be referenced as a unit, rather
  427.                        than as a series of individual primitives. The
  428.                        image of the bicycle shown in Figure 3-3, for
  429.                        example, consists of two wheels, a seat, a frame
  430.                        and handlebars. Each of these can be created and
  431.                        referenced as a unit. The seat, for example, can be
  432.                        referenced as a unit and placed at a specified
  433.                        location in World Space. The ability to define
  434.                        high-level objects for each of these components
  435.                        allows an application to select, edit or change
  436.                        them as a single unit. The application can
  437.                        experiment with the bicycle design using different
  438.                        images for the seat or wheels with a single
  439.                        CommonGraphics function.
  440.  
  441.                        Graphic data is organized into units called
  442.                        structures, which can be related to each other
  443.                        hierarchically. At the lowest level in the
  444.                        hierarchy, primitives and attributes are used to
  445.                        compose objects which may, in turn, be referenced
  446.                        as part of objects at the next highest level, and
  447.                        so on. The hierarchy resembles a tree structure
  448.                        with the root structure at the top and children
  449.                        branching off from the root.
  450.  
  451.                        Structures contain a collection of primitives and
  452.                        associated attributes. These are referred to as
  453.                        structure elements. Structure elements cannot exist
  454.                        outside of structures. Each structure has a one-to-
  455.                        one correspondence to a unique structure identifier
  456.                        which is provided by the application program. Only
  457.                        one structure may be open at one time.
  458.  
  459.                        The time at which structures are displayed is
  460.                        independent of when primitives are placed into the
  461.                        structure. The application may, at any time,
  462.                        identify a particular structure for display in a
  463.                        view, either before, during or after the primitives
  464.                        have been added to the structure. This is referred
  465.                        to as posting. A structure is posted to a view to
  466.                        display and unposted to erase. Posting is discussed
  467.                        further in the following section titled Structure
  468.                        Display.
  469.  
  470.                        When a structure is posted in a view, all
  471.                        primitives currently associated with the structure
  472.                        are displayed in the view. Figure 3-4 shows a
  473.                        typical example of a structure hierarchy being
  474.                        posted to multiple views. Notice that the same
  475.                        structure can be both posted directly to a view and
  476.                        referenced by other structures, and that a
  477.  
  478.                        The images of these multiple references can vary
  479.                        depending on the location, rotation and translation
  480.                        values supplied to the REFERENCE STRUCTURE
  481.                        function.
  482.  
  483.                        Any subsequent changes to the structure, either
  484.                        through primitives being added, edited or deleted,
  485.                        will immediately be reflected in the view until the
  486.                        structure is identified for removal, or unposted,
  487.                        from the view. Removal of a structure from a view
  488.                        does not affect the existence or content of the
  489.                        structure or data storage.
  490.  
  491.                        Attributes are associated with a primitive when the
  492.                        primitive is added to a structure. If a primitive
  493.                        is removed from a structure, the attributes
  494.                        associated with the remaining primitives are not
  495.                        affected.
  496.  
  497.                        There are two types of structures: retained and
  498.                        non-retained.
  499.  
  500.                 Retained structures
  501.  
  502.                        When an application opens a retained structure with
  503.                        the OPEN STRUCTURE function, all subsequent
  504.                        primitives and associated attributes are placed
  505.                        into graphics data storage. View control, edit,
  506.                        inquiry or input functions can be used by the
  507.                        application program to act on or examine the
  508.                        contents of retained structures. 
  509.  
  510.                 Non-retained structures
  511.  
  512.                        When an application opens a non-retained structure
  513.                        with the OPEN NON RETAINED STRUCTURE function, all
  514.                        subsequent primitives are lost. Primitives added to
  515.                        a non-retained structure are displayed at the time
  516.                        they are added. If the non-retained structure is
  517.                        not posted to a view prior to the primitive being
  518.                        added, the primitive is ignored.
  519.  
  520.                        Primitives of a non-retained structure continue to
  521.                        be displayed until the next regeneration of the
  522.                        view occurs through any view control or visibility
  523.                        function.
  524.  
  525.                 Classes
  526.  
  527.                        Each structure is further divided into a pre-
  528.                        defined number of classes. Classes are
  529.                        automatically maintained by CommonGraphics. The
  530.                        organization for structures and classes can be
  531.                        described best as a two-dimensional table, much
  532.                        like a spreadsheet. Each column in the table
  533.                        represents a structure created by the application.
  534.                        Each row represents one of the pre-defined classes
  535.                        of GEOMETRY, NOTE or REFERENCE.
  536.  
  537.                        As each primitive is added to a structure, it is
  538.                        placed in a class within the currently open
  539.                        structure, based on the type of the primitive.
  540.                        Line, circle and other geometric primitives are
  541.                        added to the GEOMETRY class, text primitives are
  542.                        added to the NOTE class and references to other
  543.                        structures are added to REFERENCE class. Refer to
  544.                        the section that follows, titled Structure
  545.                        Hierarchy, for a discussion on structure references.
  546.  
  547.                        During structure traversal for either view control,
  548.                        editing or picking, CommonGraphics will only
  549.                        examine those classes that apply and in the order
  550.                        of GEOMETRY, then NOTE and then REFERENCE. When a
  551.                        structure is traversed for primitive selection,
  552.                        only those classes that contain an allowed response
  553.                        primitive are examined. The NOTE class, for
  554.                        example, will only be examined for primitive
  555.                        selection if TEXT is a valid response.
  556.  
  557.                        Classes optimize performance and, as shown in the
  558.                        following section on Visibility, allow the
  559.                        application or user to selectively decide how much
  560.                        and what type of primitive is displayed at any
  561.                        given time.
  562.  
  563.                 Visibility of data
  564.  
  565.                        The visibility of both structures and classes can
  566.                        be manipulated with the SET STRUCTURE VISIBILITY
  567.                        and SET CLASS VISIBILITY functions.
  568.  
  569.                        The contents of a structure are visible only if the
  570.                        structure is posted to a view, the primitive is
  571.                        within the window of World Space associated with
  572.                        the posted view, the visibility of the structure is
  573.                        ON and the visibility of the class in which
  574.                        primitive is added is ON. The default visibility
  575.                        for both the structure and the class is ON.
  576.  
  577.                        Consider the two-dimensional table in Figure 3-5.
  578.                        In order for each individual box to be visible,
  579.                        both the structure and class that intersect at this
  580.                        box must be ON.
  581.  
  582.                 Sturcture hierarchy
  583.  
  584.                        Structures can relate to other structures in a
  585.                        hierarchical network. A special type of primitive
  586.                        exists called a structure reference which, when
  587.                        added to an open structure using the REFERENCE
  588.                        STRUCTURE function, causes the primitives in the
  589.                        referenced structure to appear as if they were
  590.                        created in the open structure.
  591.  
  592.                        When a structure is referenced, using the REFERENCE
  593.                        STRUCTURE function, the application can identify a
  594.                        transformation to be placed on the primitives in
  595.                        the referenced structure. If the referenced
  596.                        structure contains referenced structures, the
  597.                        transformation becomes cumulative. Suppose
  598.                        structure A references structure B with a scale of
  599.                        2, that is, the primitives in structure B appear
  600.                        twice as large when drawn with structure A. If
  601.                        structure A is now referenced by structure C with a
  602.                        scale of 3, the primitives in structure B will
  603.                        appear 6 times larger when drawn in structure C.
  604.                        The same logic applies to transformations and
  605.                        rotations.
  606.  
  607.                        Using the example of the bicycle diagram from
  608.                        Figure 3-3, the root structure might be the frame,
  609.                        and the seat, wheel and handle bar structures could
  610.                        be referenced within the frame structure. A major
  611.                        advantage of using structures in this case is that
  612.                        the primitives for the wheel structure are stored
  613.                        once, but referenced several times.
  614.  
  615.                        Refer back to Figure 3-4 for a representation of
  616.                        hierarchical structures.
  617.  
  618.                        Structure references cannot be nested, however,
  619.                        CommonGraphics does not explicitly check for this
  620.                        condition.
  621.  
  622.                        Referring to Figure 3-6, structure A may not
  623.                        reference structure B if structure B references
  624.                        either structure A or another structure that
  625.                        directly or indirectly references structure A.
  626.  
  627.           Strucuture operations
  628.  
  629.                        Structures may be operated on in one of three ways:
  630.                        through general editing operations, operations
  631.                        performed on the structure as a whole and
  632.                        operations that support the viewing of the
  633.                        primitives within the structure.
  634.  
  635.                 Structure editing
  636.  
  637.                        Structures may be edited by inserting new
  638.                        primitives, and by changing or deleting existing
  639.                        primitives.
  640.  
  641.                        Inserting primitives into a new structure and
  642.                        appending primitives into an existing structure are
  643.                        accomplished in the same way. The OPEN STRUCTURE or
  644.                        OPEN NON RETAINED STRUCTURE functions are used to
  645.                        open a structure for editing. If another structure
  646.                        is currently open, it will automatically be closed
  647.                        before the new structure is opened. The CLOSE
  648.                        STRUCTURE function can be used to close the
  649.                        currently open structure explicitly. If the
  650.  
  651.                        currently open structure is not known, the INQUIRE
  652.                        OPEN STRUCTURE function can be used to find the information.
  653.  
  654.                        When a structure is open, the application program
  655.                        may simply insert new primitives through the basic
  656.                        primitive calls such as DRAW ARC or DRAW LINE. All
  657.                        primitives are inserted at the end of the
  658.                        structure.
  659.  
  660.                        The application program is responsible for
  661.                        associating each primitive with an identification
  662.                        number through the SET ELEMENT IDENTIFIER function.
  663.                        This number can be used later on to refer to the
  664.                        exact primitive for either editing or retrieval
  665.                        purposes. If an identifier is not assigned by the
  666.                        application, a default value of zero is used. An
  667.                        element identifier is returned with each valid pick
  668.                        to let the application know which primitive was
  669.                        selected.
  670.  
  671.                        Identifiers do not have to be unique, either within
  672.                        a single structure or over several structures.
  673.                        Several primitives within the same structure can
  674.                        have the same identifier so that they may later be
  675.                        manipulated as a group. An application program
  676.                        could create a new primitive, for example a
  677.                        drafting dimension type, by using a series of calls
  678.                        to DRAW ARROW, DRAW LINE and DRAW TEXT and
  679.                        associating them by using the same element
  680.                        identifier. Later in the application, this new
  681.                        primitive type could be examined as a unit because
  682.                        of the similar element identifier.
  683.  
  684.                        A structure may also be edited by removing
  685.                        primitives within the structure. The DELETE ELEMENT
  686.                        and DELETE ELEMENT RANGE functions rely on element
  687.                        identifiers to locate and remove specified
  688.                        primitives. Since attributes are associated
  689.                        directly with a primitive, deleting a primitive has
  690.                        no effect on the attributes of other primitives in
  691.                        the structure.
  692.  
  693.                 Structure maintenance
  694.  
  695.                        There are several functions that apply to a
  696.                        structure as a whole.
  697.  
  698.                        All of the primitives of a structure may be deleted
  699.                        through the EMPTY STRUCTURE function. This function
  700.                        only deletes the contents of the structure and has
  701.                        no effect on the existence, references to, or view
  702.  
  703.                        posting of the structure.
  704.  
  705.                        A structure and all associated primitives may be
  706.                        deleted from graphic storage through the DELETE
  707.                        STRUCTURE function. This function has no effect on
  708.                        structure references. If a reference to a non-
  709.                        existent structure is encountered, the reference is
  710.                        ignored. Structure references can only be deleted
  711.                        through the DELETE ELEMENT or DELETE ELEMENT RANGE
  712.                        functions. The DELETE ALL STRUCTURES function is
  713.                        provided to delete all structures. Structures that
  714.                        are deleted and also posted to a view, are unposted
  715.                        from the view before being deleted.
  716.  
  717.                        A structure identifier may be changed through the
  718.                        CHANGE STRUCTURE IDENTIFIER function. The new
  719.                        identifier must be unique. This function does not
  720.                        effect structure references. To change a structure
  721.                        reference, the CHANGE STRUCTURE REFERENCE function
  722.                        should be used.
  723.  
  724.                        Inquiry functions return information about
  725.                        structure identifiers to the application program.
  726.                        INQUIRE OPEN STRUCTURE returns the identifier of
  727.                        the currently open structure, INQUIRE STRUCTURE
  728.                        EXISTS returns whether or not a structure exists,
  729.                        INQUIRE STRUCTURES returns each existing structure
  730.                        identifier, and INQUIRE STRUCTURES POSTED TO VIEW
  731.                        returns each structure that is displayed in a
  732.                        specified view.
  733.  
  734.                 Structure display
  735.  
  736.                        Primitives within a structure are only displayed
  737.                        after the structure has been posted to a view
  738.                        through the POST STRUCTURE TO VIEW, POST ALL TO
  739.                        VIEW, or POST TO ALL VIEWS functions. Posting
  740.                        should only be done on root structures and not on
  741.                        structures that are only used as references in
  742.                        other structures. A root structure is one that is
  743.                        at the top of the structure hierarchy. A structure
  744.                        may be displayed because it is both explicitly
  745.                        posted and referenced by another structure. Display
  746.                        priority is assigned based on the order the
  747.                        structures are posted to a view, with the first
  748.                        posted structure being displayed before latter
  749.                        posted structures.
  750.  
  751.                        Primitives are similarly removed from the display
  752.                        by unposting the associated structure through the
  753.                        UNPOST ALL FROM VIEW, UNPOST FROM ALL VIEWS and the
  754.                        UNPOST STRUCTURE FROM VIEW functions.
  755.  
  756.                        Primitives may also be removed from the display by
  757.                        making the associated structure or class invisible
  758.                        through the SET STRUCTURE VISIBILITY or SET CLASS
  759.                        VISIBILITY functions, respectively. 
  760.  
  761.                        If a primitive is deleted from a structure, it is
  762.                        also removed from the display. Refer to the section
  763.                        titled Structure Editing above.
  764.  
  765.           Request for input
  766.  
  767.                        Graphic input refers to information returned to the
  768.                        application program as a direct result of some
  769.                        action taken on the part of the user using a
  770.                        graphic input device such as a mouse or the
  771.                        keyboard.
  772.  
  773.                        Moving the graphic cursor within tolerance of a
  774.                        primitive and pressing a button or key to indicate
  775.                        selection causes PICK information to be returned to
  776.                        the application indicating the type and location of
  777.                        the primitive. If the graphic cursor is not within
  778.                        tolerance of a primitive, but still inside a view,
  779.                        LOCATE information is returned indicating just the
  780.                        position of the graphic cursor. With the graphic
  781.                        cursor outside of a view, SCREEN information is
  782.                        returned. Text entered from the keyboard returns
  783.                        STRING information.
  784.  
  785.                 Pick types and classes
  786.  
  787.                        Graphic standards, including PHIGS, typically
  788.                        separate the functions used for input by class,
  789.                        including event, sample and request, and by type,
  790.                        including pick, choice, locator, valuator and
  791.                        string.
  792.  
  793.                        While this may appear to provide the most in
  794.                        flexibility, it can be less flexible for
  795.                        applications that require the ability to allow
  796.                        multiple selection types and classes for each
  797.                        request for input. For example, an application may
  798.                        allow a user to select from a menu or simply type
  799.                        in the item name from the keyboard. In other
  800.                        graphic standards or toolkits, this is accomplished
  801.                        by using a series of functions where the
  802.                        application program is, in effect, querying the
  803.                        state of each input class until a valid response is
  804.                        detected. This logic can often be difficult to
  805.                        program.
  806.  
  807.                        CommonGraphics is designed with a more common
  808.                        approach to requests for input. Rather than
  809.                        providing individual functions for these various
  810.                        types of input types and device classes, a single
  811.                        input function, REQUEST INPUT, handles all
  812.                        requests. The application program is informed of
  813.                        the type and class of input in the returned request
  814.                        buffer. CommonGraphics supports the PICK, LOCATE,
  815.                        SCREEN and STRING device classes.
  816.  
  817.                 Name sets
  818.  
  819.                        There are cases when the application program may
  820.                        want to limit the type and class of input that is
  821.                        allowed. For example, in a CAD application, the
  822.                        user may want to define a point as the intersection
  823.                        of two lines. In this case, the application may not
  824.                        want the user to be allowed to select an arc or
  825.                        circle or any other primitive besides a line. Input
  826.                        from any device class except PICK would not be
  827.                        allowed.
  828.  
  829.                        The application program can limit the type and
  830.                        class of selection through the use of name sets.
  831.                        Name sets allow the user to control which device
  832.                        classes are enabled or primitives are examined
  833.                        during a request for input. There can be any number
  834.                        of name sets defined based, in part, on the number
  835.                        of different input criteria that the application
  836.                        program needs.
  837.  
  838.                        There is no difference between name sets that
  839.                        contain device classes and those that contain
  840.                        primitive values, i.e. the application does not
  841.                        identify the type of set in any function that deals
  842.                        with name sets. The application is responsible for
  843.                        using the appropriate name set in the correct
  844.                        context.
  845.  
  846.                        Name sets are created and managed by the functions
  847.                        ADD NAME TO SET, ADD ALL NAMES TO SET and REMOVE
  848.                        NAME FROM SET.
  849.  
  850.                 Structure pickability
  851.  
  852.                        If addition to pick filters, the application can
  853.                        control which structures are examined for a valid
  854.                        selection through the SET STRUCTURE PICKABILITY
  855.                        function. Structures whose pickability is OFF will
  856.                        not be examined.
  857.  
  858.                 Pick class notification
  859.  
  860.                        If a primitive is within tolerance of the graphic
  861.                        cursor, and the button or key is pressed to confirm
  862.                        selection, the primitive will be highlighted to
  863.                        verify the selection to the user. Highlighting
  864.                        takes the form of quickly erasing and redrawing the
  865.                        selected primitive using the associated attributes.
  866.                        Primitives whose interiors are filled are
  867.                        highlighted by also erasing and redrawing the
  868.                        interior.
  869.  
  870.                        A special case is made for TEXT and STRUCTURE
  871.                        REFERENCE primitives. Only the individual character
  872.                        and individual primitive is highlighted if either
  873.                        of these two primitives are selected.
  874.  
  875.                        There may be times when the content of a structure
  876.                        should not be highlighted, or perhaps the
  877.                        application wishes to use a different method to
  878.                        highlight. Menus are a case in point. The
  879.                        verification to the user may be that a sub-menu is
  880.                        displayed, or the graphic image changes as a result
  881.                        of a menu selection. The SET STRUCTURE HIGHLIGHT
  882.                        function can be used to control whether the
  883.                        primitives of a structure are highlighted when
  884.                        selected. Structures whose highlight is OFF will
  885.                        not be highlighted.
  886.  
  887.                 String class notification
  888.  
  889.                        Each character is echoed on the graphics device as
  890.                        it is entered from the keyboard. The SET STRING
  891.                        RESPONSE function is used to set the location and
  892.                        color for the characters of the string. Since input
  893.                        is not entered in relation to a view, the location
  894.                        for the echo is specified in NDC space.
  895.  
  896.                        The location has several important design
  897.                        considerations for the application. As the user
  898.                        erases characters with the backspace key, they are
  899.                        removed from the screen using the background color
  900.                        specified in SET STRING RESPONSE. If the echo
  901.                        location crosses several views which have
  902.                        backgrounds of different colors, the characters
  903.                        will not appear to erase even though they will not
  904.                        be contained in the response. The STRING response
  905.                        area should be designed to be in a separate area of
  906.                        the screen, completely contained in a single view,
  907.                        or used across several views that share a common
  908.                        background color.
  909.  
  910.           Errors
  911.  
  912.                        There are three types of errors possible in
  913.                        CommonGraphics: recoverable, non-recoverable and
  914.                        internal.
  915.  
  916.                 Recoverable errors
  917.  
  918.                        Many functions return a status to the application
  919.                        program that indicates whether or not the function
  920.                        completed successfully. Several of the INQUIRY
  921.                        functions, for example, provide for the application
  922.                        program to loop through the contents of graphic
  923.                        storage and return information about all structures
  924.                        or views. When the end of the list is encountered,
  925.                        a status is returned that tells the application
  926.                        program to stop the inquiry. For this type of
  927.                        error, failure to stop has no effect on the
  928.                        application program other that it will receive more
  929.                        of these error statuses. This type of status is
  930.                        always TRUE, if the function completed
  931.                        successfully, or FALSE if the function did not
  932.                        complete successfully.
  933.  
  934.                 Non-recoverable errors
  935.  
  936.                        Errors are issued as a result of the application
  937.                        program using a function incorrectly.
  938.  
  939.                        Errors generally have the effect that the
  940.                        application program does not behave in the expected
  941.                        manner. The application program may have used a
  942.                        primitive function, such as DRAW LINE, without
  943.                        first opening a structure. CommonGraphics will
  944.                        ignore the primitive function and the application
  945.                        developer or user will not see the result. Other
  946.                        examples of errors include opening a view with an
  947.                        NDC space outside the range of the physical screen,
  948.                        posting a structure to a view where either the
  949.                        structure or view does not exist, and attempting to
  950.                        draw primitives with invalid data such as circles
  951.                        with a zero radius.
  952.  
  953.                        Errors that are visual in nature can be corrected
  954.                        using the DUMP function which produces a readable
  955.                        form of graphics storage. The user can find out
  956.                        which structures are posted to which views, as well
  957.                        as detailed information about each primitive.
  958.  
  959.                        Errors may also occur that are not as visual.
  960.                        Closing a structure that is not open or attempting
  961.  
  962.                        to add a non-existent device class or primitive to
  963.                        a name set are errors that the user or developer
  964.                        will not visually notice.
  965.  
  966.                 Internal Errors
  967.  
  968.                        Internal errors are a result of CommonGraphics
  969.                        being unable to allocate system memory to place
  970.                        information in graphics storage.
  971.  
  972.  
  973.                 Error Logging
  974.  
  975.                        All non-recoverable and internal errors are written
  976.                        to an error file that can be examined after
  977.                        CommonGraphics has terminated. The error messages
  978.                        have been designed to be as informative as
  979.                        possible. Most error messages include the name of
  980.                        the function that is in error and, where
  981.                        appropriate, the name of the structure or view that
  982.                        caused the error. Refer to Appendix C for a list of
  983.                        all error messages.
  984.  
  985.                                                                      Functions
  986.  
  987.  
  988.           This chapter contains detailed information about each
  989.           CommonGraphics function. Each function is listed alphabetically.
  990.           Information includes a description of the function, the formal
  991.           language syntax, a list of related functions and a return value.
  992.  
  993.           For additional information, refer to Appendix A which provides
  994.           details about each data type used by the functions, Appendix B
  995.           which lists each function by class, and Appendix C which lists
  996.           any associated error messages.
  997.  
  998.           ADD ALL NAMES TO SET
  999.  
  1000.  
  1001.           Add every primitive or device class to the specified name set. 
  1002.  
  1003.  
  1004.               void cg_add_all_names_to_set (name_set)
  1005.  
  1006.               t_name_set  *name_set  Name of the set
  1007.  
  1008.  
  1009.           Name sets allow the user to control which device classes are
  1010.           enabled or primitives are examined during a request for input.
  1011.           This function should be used in cases where all device classes
  1012.           are to be enabled or primitives are allowed to be selected.
  1013.  
  1014.           This function can also be used to narrow the allowed values in a
  1015.           set that contains most of the device classes or primitives,
  1016.           except for a few. In this case, this function can be used in
  1017.           conjunction with the REMOVE NAME FROM SET function to selectively
  1018.           remove a few of the classes or primitives. This may be preferable
  1019.           over having to enumerate each device class or primitive in
  1020.           sequence.
  1021.  
  1022.           Since name sets contain both devices classes and primitives, care
  1023.           should be taken to ensure proper use.
  1024.  
  1025.           ADD NAME TO SET
  1026.  
  1027.  
  1028.           Add a single device class or primitive to the specified name set.
  1029.  
  1030.  
  1031.  
  1032.               void cg_add_name_to_set (name_set, value);
  1033.  
  1034.               t_name_set  *name_set  Name of the set
  1035.               int            value       Device class or primitive to add
  1036.  
  1037.  
  1038.           Name sets allow the user to control which device classes are
  1039.           enabled or primitives are examined during a request for input.
  1040.           This function adds a single device class or primitive to a
  1041.           specified name set. If a name set is to contain more than one
  1042.           class or primitive, this function can be called repeatedly to
  1043.           enumerate each class or primitive in the set.
  1044.  
  1045.           Since name sets contain both devices classes and primitives, care
  1046.           should be taken to ensure proper use.
  1047.  
  1048.           CHANGE REFERENCE ABS
  1049.  
  1050.  
  1051.           Change the transformation that is associated with a referenced
  1052.           structure. The new origin for the structure is in relation to the
  1053.           absolute origin (0, 0) of World Space.
  1054.  
  1055.  
  1056.               void cg_change_reference_abs (structure_name, reference_name,
  1057.                                             element_id, translate, angle,
  1058.                                             scale)
  1059.  
  1060.               char           structure_name[]  Name of the structure to
  1061.                                                search for references
  1062.               char           reference_name[]  Name of the referenced
  1063.                                                structure to change
  1064.               long           element id        Identifier of the referenced
  1065.                                                structure 
  1066.               t_world_coord  translation       New center of the referenced
  1067.                                                structure
  1068.               real           angle              Degrees of rotation
  1069.               real           scale              Scale factor
  1070.  
  1071.  
  1072.           If the value for the element identifier of the referenced
  1073.           structure to change is specified as -1, all referenced structures
  1074.           with the matching name, regardless of the element identifier,
  1075.           will be changed.
  1076.  
  1077.           CHANGE REFERENCE NAME
  1078.  
  1079.  
  1080.           Replace a structure that is being referenced in a structure with
  1081.           another structure.
  1082.  
  1083.  
  1084.               void cg_change_reference_name (structure_name, element_id,
  1085.                                              old_structure_name,
  1086.                                              new_structure_name)
  1087.  
  1088.               char  structure_name         Name of the structure to search for
  1089.                                           referenced structures to change
  1090.               long  element_id            Identifier of the referenced
  1091.                                           structure to change
  1092.               char  old_structure_name[]  Name of the existing referenced
  1093.                                           structure
  1094.               char  new_structure_name[]  New name for the structure
  1095.  
  1096.  
  1097.           If the name of the structure to search for the referenced
  1098.           structure(s) is blank, all structures will be searched. If the
  1099.           value for the element identifier of the referenced structure to
  1100.           change is specified as -1, all referenced structures with the
  1101.           matching name, regardless of the element identifier, will be
  1102.           changed.
  1103.  
  1104.           CHANGE REFERENCE REL
  1105.  
  1106.  
  1107.           Change the transformation that is associated with a referenced
  1108.           structure. The new origin for the structure is in relation to the
  1109.           origin (0, 0) of the structure that is being changed.
  1110.  
  1111.  
  1112.               void cg_change_reference_rel (structure_name, reference_name,
  1113.                                             element_id, translate, angle,
  1114.                                             scale)
  1115.  
  1116.               char           structure_name[]  Name of the structure to search
  1117.                                                for references
  1118.               char           reference_name[]  Name of the referenced
  1119.                                                structure to change
  1120.               long           element id        Identifier of the referenced
  1121.                                                structure 
  1122.               t_world_coord  translation        New center of the referenced
  1123.                                                structure
  1124.               real           angle              Degrees of rotation
  1125.               real           scale              Scale factor
  1126.  
  1127.  
  1128.           If the value for the element identifier of the referenced
  1129.           structure to change is specified as -1, all referenced structures
  1130.           with the matching name, regardless of the element identifier,
  1131.           will be changed.
  1132.  
  1133.           CHANGE STRUCTURE NAME
  1134.  
  1135.  
  1136.           Change the name of an existing structure.
  1137.  
  1138.  
  1139.               void cg_change_structure_name (old_structure_name,
  1140.                                              new_structure_name)
  1141.  
  1142.               char  old_structure_name[]  Name of the structure to change
  1143.               char  new_structure_name[]  New name for the structure
  1144.  
  1145.  
  1146.           All structure references that refer to the structure will also be
  1147.           changed to the new structure. If the name of structure A is
  1148.           changed to B, all structure references that refer to structure A
  1149.           will be changed to refer to structure B. To change just the name
  1150.           of a structure reference, use CHANGE REFERENCE NAME.
  1151.  
  1152.           CLOSE STRUCTURE
  1153.  
  1154.  
  1155.           Close the currently open structure.
  1156.  
  1157.  
  1158.               void cg_close_structure (structure_name)
  1159.  
  1160.               char  structure_name[]  Name of the structure to close
  1161.  
  1162.  
  1163.           New primitives are not allowed until a new structure is opened or
  1164.           an existing structure is re-opened.
  1165.  
  1166.           The name of the structure is included in the calling sequence to
  1167.           help ensure that the proper structure is closed. An error will
  1168.           result if the structure closed is not the same as the currently
  1169.           open structure.
  1170.  
  1171.           Closing a structure has no effect on the content of the structure
  1172.           or on the actual image that is currently visible.
  1173.  
  1174.           CLOSE VIEW
  1175.  
  1176.  
  1177.           Close the currently open view and erase the image from the
  1178.           graphic screen. 
  1179.  
  1180.  
  1181.               void cg_close_view (view_name)
  1182.  
  1183.               char  view_name[]  Name of the view to open
  1184.  
  1185.  
  1186.           All structures that are currently posted to the view remain
  1187.           posted. Structures can be posted to a view that is closed, but
  1188.           the primitives will not be displayed until the view is opened,
  1189.           the structure is posted to another view that is open, or the
  1190.           structure is referenced by another structure whose contents are
  1191.           displayed.
  1192.  
  1193.           DELETE ALL STRUCTURES
  1194.  
  1195.  
  1196.           Remove all structures and primitives from graphics storage.
  1197.  
  1198.  
  1199.               void cg_delete_all_structures (void)
  1200.  
  1201.  
  1202.           All views that are currently visible are cleared. All structures
  1203.           are automatically unposted from all views.
  1204.  
  1205.           DELETE ALL VIEWS
  1206.  
  1207.  
  1208.           Remove all views from graphics storage and erase the image from
  1209.           the graphics screen.
  1210.  
  1211.  
  1212.               void cg_delete_all_views (void)
  1213.  
  1214.  
  1215.           All structures that are posted to the views are automatically
  1216.           unposted.
  1217.  
  1218.           DELETE ELEMENT
  1219.  
  1220.  
  1221.           Remove each element with a specified identifier from a single
  1222.           structure.
  1223.  
  1224.  
  1225.               void cg_delete_element (structure_name, element_identifier)
  1226.  
  1227.               char  structure_name[]    Name of the structure to search for
  1228.                                         identifier
  1229.               long  element_identifier  Identifier of the element(s) to delete
  1230.  
  1231.  
  1232.           If each element is currently visible in any view, it is erased
  1233.           from the view. If an element is not found whose identifier
  1234.           matches the one specified, no action is taken and the calling
  1235.           program is not notified.
  1236.  
  1237.           Removing an element has no effect on the current setting for any
  1238.           attribute, nor does it have any effect on the appearance of
  1239.           subsequent primitives in the structure from which it is removed.
  1240.  
  1241.           DELETE ELEMENT RANGE
  1242.  
  1243.  
  1244.           Remove each element whose identifier is between a specified range
  1245.           from a single structure.
  1246.  
  1247.  
  1248.               void cg_delete_element_range (structure_name, begin_identifier,
  1249.                                             end_identifier)
  1250.  
  1251.               char  structure_name[]  Name of the structure to search for
  1252.                                       identifier
  1253.               long  begin_identifier  Beginning identifier of the elements to
  1254.                                       delete
  1255.               long  end_identifier     Ending identifier of the elements to
  1256.                                       delete
  1257.  
  1258.  
  1259.           If each element in the range is currently visible in any view, it
  1260.           is erased from the view. If an element is not found whose
  1261.           identifier matches the one specified, no action is taken and the
  1262.           calling program is not notified.
  1263.  
  1264.           The specified range is inclusive. The beginning element
  1265.           identifier must be less than or equal to the ending element
  1266.           identifier in the range.
  1267.  
  1268.           Removing an element has no effect on the current setting for any
  1269.           attribute, nor does it have any effect on the appearance of
  1270.           subsequent primitives in the structure from which it is removed.
  1271.  
  1272.           DELETE STRUCTURE
  1273.  
  1274.  
  1275.           Remove a structure from graphics storage.
  1276.  
  1277.  
  1278.               void cg_delete_structure (structure_name)
  1279.  
  1280.               char  structure_name[]  Name of the structure to delete
  1281.  
  1282.  
  1283.           The structure is automatically unposted from all views. The
  1284.           contents of the structure, if visible, are erased from the
  1285.           screen.
  1286.  
  1287.           If the structure is the currently open structure, no primitives
  1288.           may be added until a new structure is opened or an existing
  1289.           structure is re-opened.
  1290.  
  1291.           If the structure is referenced by another structure, the
  1292.           reference remains but is ignored at the time that the structure
  1293.           is traversed. The reference can be changed by either renaming it
  1294.           to another structure or by deleting the reference.
  1295.  
  1296.           DELETE ALL STRUCTURES
  1297.  
  1298.  
  1299.           Remove all structures from graphics storage.
  1300.  
  1301.  
  1302.               void cg_delete_all_structures ()
  1303.  
  1304.  
  1305.           Each structure is automatically unposted from all views. The
  1306.           contents of each structure, if visible, are erased from the
  1307.           screen.
  1308.  
  1309.           No primitives may be added until a new structure is opened.
  1310.  
  1311.           All structure references are removed.
  1312.  
  1313.           DELETE VIEW
  1314.  
  1315.  
  1316.           Remove a view from graphics storage.
  1317.  
  1318.  
  1319.               void cg_delete_view (view_name)
  1320.  
  1321.               char  view_name[]  Name of the view to delete
  1322.  
  1323.  
  1324.           All structures that are posted to the view are automatically
  1325.           unposted. The portion of the graphics screen that contains the
  1326.           view is erased.
  1327.  
  1328.           DRAW ARC
  1329.  
  1330.  
  1331.           Draw a circular arc using current attributes for line color,
  1332.           style and width. The attribute for interior style is ignored for
  1333.           circular arcs even if the arc represents a circle.
  1334.  
  1335.  
  1336.               void cg_draw_arc (center, radius, start_angle, end_angle)
  1337.  
  1338.               t_world_coord  center         Center point for the arc
  1339.               real           radius         Radius for the arc
  1340.               real           start_angle  Starting angle for the arc in
  1341.                                           degrees
  1342.               real           end_angle      Ending angle for the arc in degrees
  1343.  
  1344.  
  1345.           A circular arc is defined by a center point, a radius and
  1346.           starting and ending angles. 
  1347.  
  1348.           All angles assume that 0 degrees is at 3 o'clock with values
  1349.           increasing in the counterclockwise direction. Angles can be
  1350.           expressed as either positive or negative values, however, angles
  1351.           outside of the range 0 to 360 are normalized to that range when
  1352.           drawn.
  1353.  
  1354.           The end angle does not have to be larger than the start angle.
  1355.           If, for example, the arc is defined with a start angle of 0 and
  1356.           an end angle of -45, the arc is drawn counterclockwise from the
  1357.           325 angle to the 0 angle.
  1358.  
  1359.           A structure must be open before an arc is drawn.
  1360.  
  1361.           DRAW ARROW
  1362.  
  1363.  
  1364.           Draw an arrowhead using current attributes for line color, style,
  1365.           width and interior fill style.
  1366.  
  1367.  
  1368.               void cg_draw_arrow (start_point, length, height, angle)
  1369.  
  1370.               t_world_coord  start_point  Tip point for the arrow
  1371.               real           length         Length of the arrow
  1372.               real           height         Height of the arrow
  1373.               real           angle         Angle of rotation for the arrow in
  1374.                                           degrees
  1375.  
  1376.  
  1377.           An arrowhead is defined by a point representing the tip, a length
  1378.           along the base, a height and an angle of rotation.
  1379.  
  1380.           All angles assume that 0 degrees is at 3 o'clock with values
  1381.           increasing in the counterclockwise direction. Angles can be
  1382.           expressed as either positive or negative values, however, angles
  1383.           outside of the range 0 to 360 are normalized to that range when
  1384.           drawn.
  1385.  
  1386.           A structure must be open before an arrowhead is drawn.
  1387.  
  1388.           DRAW BSPLINE
  1389.  
  1390.  
  1391.           Draw a bspline curve using current attributes for line color,
  1392.           style and width.
  1393.  
  1394.  
  1395.               void cg_draw_bspline (number_of_points, point_array)
  1396.  
  1397.               int              number_of_points  Number of points in the array
  1398.               t_world_coord  point_array[]     Array containing curve points
  1399.  
  1400.  
  1401.           A bspline curve is defined by a series of control points to
  1402.           produce a smooth curve. An arbitrary number of control points can
  1403.           be specified. The influence that any particular point has on the
  1404.           overall curve can be controlled by, for example, specifying the
  1405.           same control point twice in series.
  1406.  
  1407.           A structure must be open before a bspline curve is drawn.
  1408.  
  1409.           DRAW CIRCLE
  1410.  
  1411.  
  1412.           Draw a circle using current attributes for line color, style,
  1413.           width and interior style.
  1414.  
  1415.  
  1416.               void cg_draw_circle (center, radius)
  1417.  
  1418.               t_world_coord  center  Center point for the circle
  1419.               real           radius  Radius of the circle
  1420.  
  1421.  
  1422.           A circle is defined by a center point and a radius.
  1423.  
  1424.           A structure must be open before a circle is drawn.
  1425.  
  1426.           DRAW ELLIPSE
  1427.  
  1428.  
  1429.           Draw an ellipse using current attributes for line color, style,
  1430.           width and interior style.
  1431.  
  1432.  
  1433.               void cg_draw_ellipse (center, x_radius, y_radius, angle)
  1434.  
  1435.               t_world_coord  center      Center point for the ellipse
  1436.               real           x_radius  Half the length of the ellipse
  1437.               real           y_radius  Half the width (height) of the ellipse
  1438.               real           angle      Angle of rotation of the ellipse
  1439.  
  1440.  
  1441.           An ellipse is defined by a center point, a radius specified along
  1442.           the x and y axis, and an angle of rotation.
  1443.  
  1444.           All angles assume that 0 degrees is at 3 o'clock with values
  1445.           increasing in the counterclockwise direction. Angles can be
  1446.           expressed as either positive or negative values, however, angles
  1447.           outside of the range 0 to 360 are normalized to that range when
  1448.           drawn.
  1449.  
  1450.           A structure must be open before an ellipse is drawn.
  1451.  
  1452.           DRAW LINE
  1453.  
  1454.  
  1455.           Draw a line using current attributes for line color, style and
  1456.           width.
  1457.  
  1458.  
  1459.               void cg_draw_line (start_point, end_point)
  1460.  
  1461.               t_world_coord  start_point  Starting point for the line
  1462.               t_world_coord  end_point      Ending point for the line
  1463.  
  1464.  
  1465.           A line is defined by a starting point and an ending point.
  1466.  
  1467.           A structure must be open before a line is drawn.
  1468.  
  1469.           DRAW MARKER
  1470.  
  1471.  
  1472.           Draw a marker using current attribute for line color.
  1473.  
  1474.  
  1475.               void cg_draw_marker (marker_style, point)
  1476.  
  1477.               t_marker_style  marker_style  Style to draw at the marker point
  1478.               t_world_coord   point           Point at which to draw the marker
  1479.  
  1480.  
  1481.           A marker is defined by a point and a marker style.
  1482.  
  1483.           Markers maintain a constant size regardless of the view or window
  1484.           currently in effect.
  1485.  
  1486.           A structure must be open before a marker is drawn.
  1487.  
  1488.           DRAW POLYLINE
  1489.  
  1490.  
  1491.           Draw a series of connected lines using current attributes for
  1492.           line color, style, width and interior style.
  1493.  
  1494.  
  1495.               void cg_draw_polyline (marker_style, connect, number_of_points,
  1496.                                      point_array)
  1497.  
  1498.               t_marker_style  marker_style      Style to draw at each point,
  1499.                                                 if any
  1500.               bool            connect            Connect first and last points?
  1501.               int               number_of_points  Number of points for the
  1502.                                                 polyline
  1503.               t_world_coord   point_array[]      Array of points for the
  1504.                                                 polyline
  1505.  
  1506.  
  1507.           Each line in the series is defined by a starting point and an
  1508.           ending point. For example, lines are drawn from indices n to n+1,
  1509.           n+1 to n+2, etc. At least two points must be specified. If
  1510.           connect is TRUE, a line will be drawn from the last point to the
  1511.           first point, creating a polygon. Only connected POLYLINEs can
  1512.           have filled interiors.
  1513.  
  1514.           An optional marker symbol can be drawn at each point.
  1515.  
  1516.           A structure must be open before a polyline is drawn.
  1517.  
  1518.           DRAW RECTANGLE
  1519.  
  1520.  
  1521.           Draw a rectangle using current attributes for line color, style,
  1522.           width and interior style.
  1523.  
  1524.  
  1525.               void cg_draw_rectangle (center, length, height, corner_radius,
  1526.                                       angle)
  1527.  
  1528.               t_world_coord  center           Center point for the rectangle
  1529.               real           length           Length of the rectangle
  1530.               real           height           Height of the rectangle
  1531.               real           corner_radius  Radius at each corner in degrees
  1532.               real           angle           Angle of rotation for the
  1533.                                             rectangle in degrees
  1534.  
  1535.  
  1536.           A rectangle if defined by a center point, a length, a height, a
  1537.           corner radius and an angle of rotation.
  1538.  
  1539.           All angles assume that 0 degrees is at 3 o'clock with values
  1540.           increasing in the counterclockwise direction. Angles can be
  1541.           expressed as either positive or negative values, however, angles
  1542.           outside of the range 0 to 360 are normalized to that range when
  1543.           drawn.
  1544.  
  1545.           A structure must be open before a rectangle is drawn.
  1546.  
  1547.           DRAW TEXT
  1548.  
  1549.  
  1550.           Draw a series of characters using the current attribute for text
  1551.           color.
  1552.  
  1553.  
  1554.               void cg_draw_text (style, lower_left, characters, height,
  1555.                                  width, angle)
  1556.  
  1557.               t_text_style      style            Either STRING_TEXT or STROKE_TEXT
  1558.               t_world_coord   lower_left      Lower left point at which to draw
  1559.                                              text
  1560.               char           characters[80]  Text characters to draw
  1561.               real           height            Character height in World
  1562.                                              coordinates
  1563.               real           width            Character width (zero uses 75 %
  1564.                                              of height)
  1565.               real           angle            Rotation angle for text
  1566.  
  1567.  
  1568.           A text string is defined by a precision style, a lower left
  1569.           corner to begin the text string, a character height, a character
  1570.           width, the characters to be drawn and an angle of rotation.
  1571.  
  1572.           All angles assume that 0 degrees is at 3 o'clock with values
  1573.           increasing in the counterclockwise direction. Angles can be
  1574.           expressed as either positive or negative values, however, angles
  1575.           outside of the range 0 to 360 are normalized to that range when
  1576.           drawn.
  1577.  
  1578.           STRING precision draws the characters using a hardware available
  1579.           font. The values for character height, width and angle are
  1580.           ignored. Characters can only be drawn horizontally.
  1581.  
  1582.           STROKE precision draws the characters using a software generated
  1583.           font.
  1584.  
  1585.           A structure must be open before a text string is drawn.
  1586.  
  1587.           DUMP
  1588.  
  1589.  
  1590.           Output the content of graphic storage to an ASCII file in a
  1591.           readable form, showing many of the hierarchical relationships.
  1592.  
  1593.  
  1594.               void cg_dump (void)
  1595.  
  1596.           EMPTY STRUCTURE
  1597.  
  1598.  
  1599.           Remove all primitives from a specified structure and erase each
  1600.           primitive from all posted views.
  1601.  
  1602.  
  1603.               void cg_empty_structure (structure_name)
  1604.  
  1605.               char  structure_name[]  Name of the structure to empty
  1606.  
  1607.  
  1608.           The structure remains posted to views and referenced by
  1609.           structures.
  1610.  
  1611.           If the structure is the currently open structure, the structure
  1612.           remains open. Primitives added after this function continue to be
  1613.           placed in the currently open structure.
  1614.  
  1615.           INITIALIZE
  1616.  
  1617.  
  1618.           Initialize the CommonGraphics system.
  1619.  
  1620.  
  1621.               void cg_initialize (void)
  1622.  
  1623.  
  1624.           This function must be called before any other function.
  1625.  
  1626.           Initial attribute settings are:
  1627.  
  1628.               element identifier  0
  1629.               interior fill       EMPTY
  1630.               line color          RED
  1631.               line style          SOLID
  1632.               line width          1
  1633.               text color          RED
  1634.  
  1635.           Device specific information is available through the INQUIRE
  1636.           WORKSTATION function. Information includes the type of device,
  1637.           the aspect ratio of the screen which can be used when opening
  1638.           views, and other hardware characteristics.
  1639.  
  1640.           INQUIRE CLASS VISIBILITY
  1641.  
  1642.  
  1643.           Return information about whether a class in a specified view is
  1644.           visible.
  1645.  
  1646.  
  1647.               bool cg_inquire_class_visibility (view name, class, value)
  1648.  
  1649.  
  1650.               char        view_name[]  Name of the view to inquire
  1651.               t_class     class         Name of the class to inquire
  1652.               t_toggle     *value         Returned visibility of the class
  1653.  
  1654.           Classes are unique to each view. Turning the visibility of a
  1655.           class in one view ON or OFF does not affect the visibility of
  1656.           the primitives in any other view.
  1657.  
  1658.           Each structure is divided into a predefined number of classes
  1659.           that contain primitives of a certain type. A good way to imagine
  1660.           this is as a table where the columns represent the structures
  1661.           and the rows represent the classes. Structure visibility affects
  1662.           an entire column and class visibility affects an entire row. In
  1663.           order for each individual box in this table to be visible, both
  1664.           the structure and class that intersect at this box must be ON.
  1665.  
  1666.           This classification of primitives provides for better viewing
  1667.           options. If a view becomes too cluttered, classes of primitives
  1668.           can be turned off much like overlays in a textbook.
  1669.  
  1670.           Return value:
  1671.  
  1672.               TRUE if the view exists and the class is valid.
  1673.               FALSE otherwise.
  1674.  
  1675.           INQUIRE NAME SET
  1676.  
  1677.  
  1678.           Return information about whether a device class or primitive is a
  1679.           member of a specified name set.
  1680.  
  1681.  
  1682.               bool cg_inquire_name_set (name_set, value)
  1683.  
  1684.               t_name_set  name_set  Name of the set
  1685.               int           *value      Device class or primitive to check in set
  1686.  
  1687.  
  1688.           Name sets allow the user to control which device classes are
  1689.           enabled or primitives are examined during a request for input.
  1690.  
  1691.           Since name sets contain both devices classes and primitives, care
  1692.           should be taken to ensure proper use. For example, the following
  1693.           example, which mixes devices classes and primitives in a single
  1694.           name set, would produce undesired results:
  1695.  
  1696.               name_set = 0;
  1697.               cg_add_name_to_set (&name_set, LINE);
  1698.               cg_inquire_name_set (&name_set, PICK);
  1699.  
  1700.  
  1701.           Return value:
  1702.  
  1703.               TRUE if the device class or primitive is in the name set.
  1704.               FALSE otherwise.
  1705.  
  1706.           INQUIRE OPEN STRUCTURE
  1707.  
  1708.  
  1709.           Return the name of the currently open structure, if any.
  1710.  
  1711.  
  1712.               bool cg_inquire_open_structure (structure_name)
  1713.  
  1714.               char  structure_name[]  Return name of current open structure
  1715.  
  1716.  
  1717.           Return value:
  1718.  
  1719.               TRUE if a structure is currently open.
  1720.               FALSE otherwise.
  1721.  
  1722.           INQUIRE PICK LIST
  1723.  
  1724.  
  1725.           Return information about each level of the structure hierarchy
  1726.           that was examined during the last request for input.
  1727.  
  1728.  
  1729.               bool cg_inquire_pick_list (value, pick_element)
  1730.  
  1731.               t_selection           value          Either FIRST or NEXT
  1732.               struct t_group_elem  pick_element  Next element in the pick list
  1733.  
  1734.  
  1735.           With each request for input using REQUEST INPUT, a buffer is
  1736.           returned that identifies the highest level structure information
  1737.           for the pick. For example, if a primitive within a referenced
  1738.           structure was selected, the request buffer contains information
  1739.           about the structure reference primitive. If the selected
  1740.           primitive is not part of a structure reference, information about
  1741.           the actual primitive, eg. LINE or CIRCLE, is returned. With
  1742.           repeated calls to this function, the application can examine the
  1743.           path through the structure hierarchy that resulted in the pick.
  1744.  
  1745.           The selection value of FIRST returns the first element in the
  1746.           pick list. Subsequent calls to this functions should use the
  1747.           selection value of NEXT.
  1748.  
  1749.           If the pick type identified in the request buffer is not PICK,
  1750.           this function is ignored.
  1751.  
  1752.           If the element type identified in the request buffer is not
  1753.           STRUCTURE REFERENCE, this function returns the same information
  1754.           as contained in the request buffer.
  1755.  
  1756.  
  1757.           Return value:
  1758.  
  1759.               TRUE if an element is returned.
  1760.               FALSE if incorrect selection type or the end of the list is
  1761.               encountered.
  1762.  
  1763.           INQUIRE PRIMITIVE ATTRIBUTES
  1764.  
  1765.  
  1766.           Return information about the current settings for all primitive
  1767.           attributes.
  1768.  
  1769.  
  1770.               void cg_inquire_primitive_attributes (attributes)
  1771.  
  1772.               struct t_attributes  *attributes  Current attribute values
  1773.  
  1774.  
  1775.           Attributes returned include element identifier, interior fill
  1776.           style, line color, line style, line width and text color.
  1777.  
  1778.  
  1779.           Return value:
  1780.  
  1781.               None
  1782.  
  1783.           INQUIRE STRING RESPONSE
  1784.  
  1785.  
  1786.           Return information about the current settings used to process a
  1787.           response of type STRING during a request for input.
  1788.  
  1789.  
  1790.               void cg_inquire_string_response (echo_pt, echo_color,
  1791.                                                background_color)
  1792.  
  1793.               t_ndc_coord  echo_pt             Location to echo each typed
  1794.                                               character
  1795.               t_color      *echo_color          Color for typed characters
  1796.               t_color      *background_color  Color for erasure of characters
  1797.  
  1798.  
  1799.           During a request for input that allows a response class of
  1800.           STRING, each character that is entered is echoed on the screen at
  1801.           the location and using the color that is returned. Since input
  1802.           does not take place in a particular view, the characters can be
  1803.           echoed at any location in NDC space.
  1804.  
  1805.  
  1806.           Return value:
  1807.  
  1808.               None
  1809.  
  1810.           INQUIRE STRUCTURES
  1811.  
  1812.  
  1813.           Return the name of each structure that is currently available.
  1814.  
  1815.  
  1816.               bool cg_inquire_structure (value, structure_name)
  1817.  
  1818.               t_selection  value               Either FIRST or NEXT
  1819.               char         structure_name[]  Return name of next structure
  1820.  
  1821.  
  1822.           The selection value of FIRST returns the first structure.
  1823.           Subsequent calls to this functions should use the selection value
  1824.           of NEXT.
  1825.  
  1826.  
  1827.           Return value:
  1828.  
  1829.               TRUE if the structure exists.
  1830.               FALSE if the selection value is incorrect or if there is no
  1831.               next structure.
  1832.  
  1833.           INQUIRE STRUCTURE EXISTS
  1834.  
  1835.  
  1836.           Return information as to whether or not a specified structure is
  1837.           currently available.
  1838.  
  1839.  
  1840.               bool cg_inquire_structure_exists (structure_name)
  1841.  
  1842.               char  structure_name[]  Name of the structure to check for
  1843.                                       existence
  1844.  
  1845.  
  1846.           Return value:
  1847.  
  1848.               TRUE if the structure exists.
  1849.               FALSE otherwise
  1850.  
  1851.           INQUIRE STRUCTURE VISIBILITY
  1852.  
  1853.  
  1854.           Return information about whether a structure is visible.
  1855.  
  1856.  
  1857.               bool cg_inquire_structure_visibility (structure name, visible)
  1858.  
  1859.  
  1860.               char        structure_name[]  Name of the structure to inquire
  1861.               t_toggle     *visible          Returned visibility of the
  1862.                                             structure
  1863.  
  1864.  
  1865.           Return value:
  1866.  
  1867.               TRUE if the structure exists.
  1868.               FALSE otherwise.
  1869.  
  1870.           INQUIRE STRUCTURES POSTED TO VIEW
  1871.  
  1872.  
  1873.           Return the name of each structure that is posted to a specified
  1874.           view.
  1875.  
  1876.  
  1877.               bool cg_inquire_structures_posted_to_view (selection, view,
  1878.                                                          structure)
  1879.   
  1880.               t_selection  selection    Either FIRST or NEXT
  1881.               char         view[]       Name of the view to search
  1882.               char         structure[]  Returned name of the next structure
  1883.  
  1884.  
  1885.           The selection value of FIRST returns the first structure posted
  1886.           to the view. Subsequent calls to this functions should use the
  1887.           selection value of NEXT.
  1888.  
  1889.  
  1890.           Return value:
  1891.  
  1892.               TRUE if a structure is returned.
  1893.               FALSE if the selection value is incorrect or if there is no
  1894.               next structure.
  1895.  
  1896.           INQUIRE VIEWS
  1897.  
  1898.  
  1899.           Return the name of each view that is currently available.
  1900.  
  1901.  
  1902.               bool cg_inquire_views (selection, view_name)
  1903.  
  1904.               t_selection  selection    Either FIRST or NEXT
  1905.               char         view_name[]  Returned name of the next view
  1906.  
  1907.  
  1908.           The selection value of FIRST returns the first view. Subsequent
  1909.           calls to this functions should use the selection value of NEXT.
  1910.  
  1911.  
  1912.           Return value:
  1913.  
  1914.               TRUE if a view returned.
  1915.               FALSE if the selection value is incorrect or if there is no
  1916.               next view.
  1917.  
  1918.           INQUIRE VIEW ATTRIBUTES
  1919.  
  1920.  
  1921.           Return information about the settings for the background color
  1922.           and border style attributes of a specified view.
  1923.  
  1924.  
  1925.               bool cg_inquire_view_attributes (view_name, color, border_style)
  1926.  
  1927.               char                 view_name[]     Name of the view to inquire
  1928.               t_color              *color           Returned background color
  1929.                                                   of the view
  1930.               t_view_border_style  *border_style  Returned border style of the
  1931.                                                   view
  1932.  
  1933.  
  1934.           Return value:
  1935.  
  1936.               TRUE if the view exists.
  1937.               FALSE otherwise.
  1938.  
  1939.           INQUIRE VIEW EXISTS
  1940.  
  1941.  
  1942.           Return information as to whether or not a specified view is
  1943.           currently available.
  1944.  
  1945.  
  1946.               bool cg_inquire_view_exists (view_name)
  1947.  
  1948.               char  view_name[]  Name of the view to inquire
  1949.  
  1950.  
  1951.           Return value:
  1952.  
  1953.               TRUE if the view exists.
  1954.               FALSE otherwise.
  1955.  
  1956.           INQUIRE VIEW TRANSFORMATION
  1957.  
  1958.  
  1959.           Return information about the viewport and window boundaries for a
  1960.           specified view. 
  1961.  
  1962.  
  1963.               bool cg_view_transformation (view, view_ll, view_ur,
  1964.                                            wndw_ll, wndw_ur)
  1965.  
  1966.               char           view[]     Name of the view to inquire
  1967.               t_ndc_coord     view_ll  Lower left NDC coordinate of view
  1968.               t_ndc_coord     view_ur  Upper right NDC coordinate of view
  1969.               t_world_coord  wndw_ll  Lower left World coordinate of window
  1970.               t_world_coord  wndw_ur  Upper right World coordinate of window
  1971.  
  1972.  
  1973.           When any view control function is applied to a view, the
  1974.           resultant window may not match the relative proportion of the
  1975.           view. Windows are always maintained with the same aspect ratio as
  1976.           the view to which they are applied. Windows are automatically
  1977.           adjusted such that more viewing range is provided than originally
  1978.           requested. After each view control function, this inquiry can be
  1979.           used to determine the exact window boundaries.
  1980.  
  1981.  
  1982.           Return value:
  1983.  
  1984.               TRUE if the view exists.
  1985.               FALSE otherwise.
  1986.  
  1987.           INQUIRE WORKSTATION
  1988.  
  1989.  
  1990.           Return device specific information about the graphics device.
  1991.  
  1992.  
  1993.               void cg_inquire_workstation (device_parameters)
  1994.  
  1995.               struct t_device  *device_parameters  Returned device specific
  1996.                                                    attributes
  1997.  
  1998.  
  1999.           Return value:
  2000.  
  2001.               None
  2002.  
  2003.           OPEN NON RETAINED STRUCTURE
  2004.  
  2005.  
  2006.           Close the current structure, if any, and open a new structure
  2007.           with the specified name. 
  2008.  
  2009.               void cg_open_non_retained_structure (structure_name)
  2010.  
  2011.               char  structure_name[]  Name of the structure to open
  2012.  
  2013.  
  2014.           Primitives added to the structure are not retained. Any view
  2015.           control function applied to a view where a non-retained structure
  2016.           is posted erases the content of the structure from the view.
  2017.           Edit, inquiry or input functions have no effect on non-retained
  2018.           structures. Retained structures are used in the same way as non-
  2019.           retained structures, except that the primitives are saved.
  2020.  
  2021.           The contents of a structure are visible only if the structure is
  2022.           posted to a view or referenced by a structure that is posted to a
  2023.           view, the primitive is within the window of World space
  2024.           associated with the posted view, the visibility of the structure
  2025.           is ON and the visibility of the class in which primitive is added
  2026.           is ON. The default visibility for both the structure and the
  2027.           class is ON.
  2028.  
  2029.           OPEN STRUCTURE
  2030.  
  2031.  
  2032.           Close the current structure, if any, and open a new structure
  2033.           with the specified name. 
  2034.  
  2035.               void cg_open_structure (structure_name)
  2036.  
  2037.               char  structure_name[]  Name of the structure to open
  2038.  
  2039.  
  2040.           All new primitives are added to this structure.
  2041.  
  2042.           View control, edit, inquiry or input functions may examine the
  2043.           contents of retained structures. Non-retained structures are used
  2044.           in the same way as retained structures, except that the
  2045.           primitives are not saved.
  2046.  
  2047.           The contents of a structure are visible only if the structure is
  2048.           posted to a view or referenced by a structure that is posted to a
  2049.           view, the primitive is within the window of World space
  2050.           associated with the posted view, the visibility of the structure
  2051.           is ON and the visibility of the class is ON. The default
  2052.           visibility for both the structure and the class is ON.
  2053.  
  2054.           OPEN VIEW
  2055.  
  2056.  
  2057.           Open a view, erase the specified view area of the screen and
  2058.           display all posted structures on the screen.
  2059.  
  2060.  
  2061.               void cg_open_view (view_name, view_ll, view_ur,
  2062.                                  background_color, border)
  2063.  
  2064.               char            view_name[]  Name of the view to open
  2065.               t_ndc_coord      view_ll       Lower left corner of view on screen
  2066.               t_ndc_coord      view_ur       Upper right corner of view on
  2067.                                            screen
  2068.               t_color         color          Background color for the view
  2069.               t_border_style  border       Either NO_BORDER or BOX_BORDER
  2070.  
  2071.  
  2072.           Enumerated values are defined for the first 16 colors that can be
  2073.           used as the background color for the view. The maximum number of
  2074.           colors supported is device specific. Additional colors may be
  2075.           passed to this function without error. Undetermined results will
  2076.           occur if the color value is not supported.
  2077.  
  2078.           Border styles can be used to distinguish the view area. A
  2079.           BOX_BORDER style encloses the view area with a white or red
  2080.           rectangle depending on whether the background color is white. A
  2081.           NO_BORDER style will not enclose the view area.
  2082.  
  2083.           The contents of a structure are visible only if the structure is
  2084.           posted to a view or referenced by a structure that is posted to a
  2085.           view, the primitive is within the window of World space
  2086.           associated with the posted view, the visibility of the structure
  2087.           is ON and the visibility of the class in which primitive is added
  2088.           is ON. The default visibility for both the structure and the
  2089.           class is ON.
  2090.  
  2091.           The default window is defined with a width of 100 units and a
  2092.           height that varies depending on the height of the view.
  2093.  
  2094.           Overlapping views are supported under the following conditions:
  2095.  
  2096.               1.    the views are not made visible at the same time. An
  2097.                    application may define views that overlap, but each
  2098.                    should only be made visible during different phases of
  2099.                    the application so there is never a true overlap.
  2100.  
  2101.               2.    the views, if visible at the same time, do not share a
  2102.                    common, posted structure in which new primitives are
  2103.                    added or re-drawn. Views are not redrawn when the
  2104.                    overlapping views are closed.
  2105.  
  2106.               3.    Element picking is not required. Primitives that are
  2107.                    hidden by the overlapping view would be pickable.
  2108.  
  2109.           Even with these restrictions, some limited use of overlapping
  2110.           views is available.
  2111.  
  2112.           PAN
  2113.  
  2114.  
  2115.           Move the window of a specified view and draw the corresponding
  2116.           primitives in World Space in the view.
  2117.  
  2118.  
  2119.               void cg_pan (view_name, point)
  2120.  
  2121.               char           view_name[]  Name of the view to change the
  2122.                                           window
  2123.               t_world_coord  point         New center point for the window
  2124.  
  2125.  
  2126.           The center point of the window for the specified view is moved to
  2127.           the specified point. The length and width of the window remain
  2128.           the same.
  2129.  
  2130.           The effect in the view is that a different image will appear
  2131.  
  2132.           POST ALL TO VIEW
  2133.  
  2134.  
  2135.           Add all currently available structures to the list of structures
  2136.           to be displayed in a specified view.
  2137.  
  2138.  
  2139.               void cg_post_all_to_view (view_name)
  2140.  
  2141.               char  view_name[]  Name of the view to post all structures
  2142.  
  2143.  
  2144.           If a new structure is opened after this function is called, the
  2145.           new structure is not automatically posted.
  2146.  
  2147.           Only the highest level structures should be posted. For example,
  2148.           if a structure will only be used as a reference, it should not be
  2149.           posted to a view.
  2150.  
  2151.           The contents of a structure are visible only if the structure is
  2152.           posted to a view or referenced by a structure that is posted to a
  2153.           view, the primitive is within the window of World space
  2154.           associated with the posted view, the visibility of the structure
  2155.           is ON and the visibility of the class in which primitive is added
  2156.           is ON.
  2157.  
  2158.           POST STRUCTURE TO VIEW
  2159.  
  2160.  
  2161.           Add a specified structure to the list of structures to be
  2162.           displayed in a specified view. 
  2163.  
  2164.               void cg_post_structure_to_view (view_name, structure_name)
  2165.  
  2166.               char  view_name[]        Name of the view to which to post
  2167.               char  structure_name[]  Name of the structure to post
  2168.  
  2169.  
  2170.           Only the highest level structures should be posted. For example,
  2171.           if a structure will only be used as a reference, it should not be
  2172.           posted to a view.
  2173.  
  2174.           The contents of a structure are visible only if the structure is
  2175.           posted to a view or referenced by a structure that is posted to a
  2176.           view, the primitive is within the window of World space
  2177.           associated with the posted view, the visibility of the structure
  2178.           is ON and the visibility of the class in which primitive is added
  2179.           is ON.
  2180.  
  2181.           POST TO ALL VIEWS
  2182.  
  2183.  
  2184.           Add a specified structure to the list of structures to be
  2185.           displayed in all currently available views.
  2186.  
  2187.  
  2188.               void cg_post_to_all_views (structure_name)
  2189.  
  2190.               char  structure_name[]  Name of the structure to post
  2191.  
  2192.  
  2193.           If a new view is created after this function is called,
  2194.           structures are not automatically posted to the new view.
  2195.            
  2196.           Only the highest level structures should be posted. For example,
  2197.           if a structure will only be used as a reference, it should not be
  2198.           posted to a view.
  2199.  
  2200.           The contents of a structure are visible only if the structure is
  2201.           posted to a view or referenced by a structure that is posted to a
  2202.           view, the primitive is within the window of World space
  2203.           associated with the posted view, the visibility of the structure
  2204.           is ON and the visibility of the class in which primitive is added
  2205.           is ON.
  2206.  
  2207.           REFERENCE STRUCTURE
  2208.  
  2209.  
  2210.           Add a structure reference primitive to the current structure.
  2211.  
  2212.  
  2213.               void cg_reference_structure (structure_name, translate, rotate,
  2214.                                            scale)
  2215.  
  2216.               char           structure_name[]  Name of the structure to
  2217.                                                reference
  2218.               t_world_coord  translation        New center of the referenced
  2219.                                                structure
  2220.               real           rotation           Angle of rotation in degrees
  2221.               real           scale              Scale percentage in both
  2222.                                                X and Y
  2223.  
  2224.  
  2225.           A structure reference draws the primitives of the specified
  2226.           structure, and all structure references in and below that
  2227.           structure, as part of the currently open structure. The current
  2228.           settings for primitive attributes are ignored. Attribute
  2229.           information is taken from the referenced primitives.
  2230.  
  2231.           The reference can be transformed from how it was originally
  2232.           created by specifying a translation, rotation and scale.
  2233.           Translation identifies a point in World Space where the origin of
  2234.           the referenced structure is to be placed. For example, a value of
  2235.           (4, 2) will translate or move the (0, 0) point of the structure
  2236.           to this new point. In effect, the structure is shifted to the
  2237.           right along the X-axis and upward along the Y-axis. Rotation
  2238.           rotates each primitive about the center of the X-axis and Y-axis.
  2239.           Scale either reduces or enlarges the visual display of the
  2240.           primitives.
  2241.  
  2242.           All angles assume that 0 degrees is at 3 o'clock with values
  2243.           increasing in the counterclockwise direction. Angles can be
  2244.           expressed as either positive or negative values, however, angles
  2245.           outside of the range 0 to 360 are normalized to that range when
  2246.           drawn.
  2247.  
  2248.           A structure must be open before a structure is referenced.
  2249.  
  2250.           REMOVE NAME FROM SET
  2251.  
  2252.  
  2253.           Remove a device class or primitive from the specified name set. 
  2254.  
  2255.  
  2256.               void cg_remove_name_from_set (name_set, value)
  2257.  
  2258.               t_name_set  *name_set  Name of the set
  2259.               int           value       Device class or primitive type to remove
  2260.  
  2261.  
  2262.           Name sets allow the user to control which device classes are
  2263.           enabled or primitives are examined during a request for input.
  2264.           This function removes a single device class or primitive from a
  2265.           specified name set. This function can be called repeatedly to
  2266.           remove more than one class or primitive from the set.
  2267.  
  2268.           This function can be used to narrow the allowed values in a set
  2269.           that contains most of the primitives, except for a few. In this
  2270.           case, this function can be used in conjunction with the ADD ALL
  2271.           NAMES TO SET function to selectively remove a few of the classes
  2272.           or primitives. This may be preferable over having to enumerate
  2273.           each device class or primitive in sequence.
  2274.  
  2275.           Since name sets contain both devices classes and primitives, care
  2276.           should be taken to ensure proper use.
  2277.  
  2278.           REQUEST INPUT
  2279.  
  2280.  
  2281.           Return input from the user as either an element that was picked,
  2282.           a location in World space, a screen location in Normalized Device
  2283.           Coordinates or a string of characters from the keyboard.
  2284.  
  2285.  
  2286.               void cg_request_input (allowed_classes, allowed_responses,
  2287.                                      response)
  2288.  
  2289.               t_name_set               allowed_devices    Set of allowed input
  2290.                                                           classes
  2291.               t_name_set               allowed_responses  Set of allowed
  2292.                                                           primitives
  2293.               char                     *prompt             Prompt to display
  2294.               struct t_request_buffer  *response          Response buffer
  2295.  
  2296.  
  2297.           Graphic input refers to information returned to the application
  2298.           program as a direct result of some action taken on the part of
  2299.           the user using a graphic input device such as a mouse or the
  2300.           keyboard.
  2301.  
  2302.           Moving the graphic cursor within tolerance of a primitive and
  2303.           pressing a button or key to indicate selection causes PICK
  2304.           information to be returned to the application indicating the type
  2305.           and location of the primitive. If the graphic cursor is not
  2306.           within tolerance of a primitive, but still inside a view, LOCATE
  2307.           information is returned indicating just the position of the
  2308.           graphic cursor. With the graphic cursor outside of a view, SCREEN
  2309.           information is returned. Text entered from the keyboard returns
  2310.           STRING information. Each of these device types are only activated
  2311.           if specified in the set of allowed devices. The set of allowed
  2312.           responses specifies the list of primitives that are examined for
  2313.           PICK information.
  2314.  
  2315.           With each request for input, an initial prompt can be specified
  2316.           that helps identify the type of request to the user. Responses
  2317.           from the keyboard are echoed following this prompt. After the
  2318.           user makes a selection, a buffer is returned that contains
  2319.           information about the user response. The SET STRING RESPONSE
  2320.           function specifies where and how the prompt characters are to be
  2321.           echoed on the screen.
  2322.  
  2323.           If the response is of type PICK, the response buffer identifies
  2324.           the highest level structure information for the pick operation.
  2325.           For example, if a primitive within a referenced structure was
  2326.           selected, the request buffer contains information about the
  2327.  
  2328.           structure reference primitive. The INQUIRE PICK LIST function
  2329.           provides information about the hierarchy of the pick. If the
  2330.           structure is not a reference, information about the actual
  2331.           primitive, eg. LINE or CIRCLE, is returned. Only structures that
  2332.           are posted to a view, visible and pickable are traversed to
  2333.           determine if a primitive was selected.
  2334.  
  2335.           If the response if of type LOCATE or SCREEN, the response buffer
  2336.           contains the location that was identified.
  2337.  
  2338.           If the response if of type STRING, the response buffer contains
  2339.           the characters that were entered from the keyboard. The SET
  2340.           STRING RESPONSE function specifies where and how the characters
  2341.           are to be echoed on the screen.
  2342.  
  2343.           The initial prompt should be used to identify the type of
  2344.           response that the user should enter, for example "Select point or
  2345.           enter coordinate". This example makes use of both a PICK response
  2346.           for the point or a STRING response for the coordinate of the
  2347.           point. If the user entered the coordinate from the keyboard, each
  2348.           character in the response would be displayed immediately after
  2349.           the prompt and returned in the response buffer. The application
  2350.           is responsible for converting the characters in the response
  2351.           buffer into a valid coordinate.
  2352.  
  2353.           Name sets allow the user to control which device classes are
  2354.           enabled or primitives are examined during a request for input.
  2355.  
  2356.           There is no difference between name sets that contain device
  2357.           classes and those that contain primitive values, i.e. the
  2358.           application does not identify the type of set in any function
  2359.           that deals with name sets. The application is responsible for
  2360.           using the appropriate name set in the correct context.
  2361.  
  2362.           SET CLASS VISIBILITY
  2363.  
  2364.  
  2365.           Turn the visibility of a class on or off.
  2366.  
  2367.  
  2368.               void cg_set_class_visibility (view_name, class, value)
  2369.  
  2370.               char      view_name[]  Name of the view
  2371.               t_class   class          Name of the class
  2372.               t_toggle  value          ON or OFF
  2373.  
  2374.  
  2375.           Visibility affects the specified class in each structure,
  2376.           including referenced structures.
  2377.  
  2378.           Each structure is divided into a predefined number of classes
  2379.           that contain primitives of a certain type. A good way to imagine
  2380.           this is as a table where the columns represent the structures and
  2381.           the rows represent the classes. Structure visibility affects an
  2382.           entire column and class visibility affects an entire row. In
  2383.           order for each individual box in this table to be visible, both
  2384.           the structure and class that intersect at this box must be ON.
  2385.  
  2386.           This classification of primitives provides for better viewing
  2387.           options. If a view becomes too cluttered, classes of primitives
  2388.           can be turned off much like overlays in a textbook.
  2389.  
  2390.           SET ELEMENT IDENTIFIER
  2391.  
  2392.  
  2393.           Initialize the current setting for the element identifier
  2394.           primitive attribute to the specified value. Subsequent primitives
  2395.           are initialized with this value.
  2396.  
  2397.  
  2398.               void cg_set_element_identifier (identifier)
  2399.  
  2400.               long  identifier  Value to assign to subsequent primitives
  2401.  
  2402.  
  2403.           Element identifiers are used to identify primitives for
  2404.           operations on structures such as deletion, edit, picking or
  2405.           retrieval.
  2406.  
  2407.           Primitive attributes are global over all structures and are not
  2408.           affected by any structure function. Deleting a primitive from a
  2409.           structure, for example, does not affect the attributes of any
  2410.           previous or subsequent primitives in the structure.
  2411.  
  2412.           SET INTERIOR STYLE
  2413.  
  2414.  
  2415.           Initialize the current setting for the interior style primitive
  2416.           attribute to the specified value. Subsequent arrow, circle,
  2417.           polyline and rectangle primitives are initialized with this
  2418.           value.
  2419.  
  2420.  
  2421.               void cg_interior_style (style)
  2422.  
  2423.               t_interior_style  style  Style to assign to subsequent
  2424.                                        primitives
  2425.  
  2426.  
  2427.           Primitive attributes are global over all structures and are not
  2428.           affected by any structure function. Deleting a primitive from a
  2429.           structure, for example, does not affect the attributes of any
  2430.           previous or subsequent primitives in the structure.
  2431.  
  2432.           SET LINE COLOR
  2433.  
  2434.  
  2435.           Initialize the current setting for the line color primitive
  2436.           attribute to the specified value. Subsequent primitives, except
  2437.           for text, are initialized with this value.
  2438.  
  2439.  
  2440.               void cg_set_line_color (color)
  2441.  
  2442.               t_color  color  Color to be used with subsequent primitives
  2443.  
  2444.  
  2445.           Enumerated values are defined for the first 16 colors. The
  2446.           maximum number of colors supported is device specific. Additional
  2447.           colors may be passed to this function without error. Undetermined
  2448.           results will occur if the color value is not supported.
  2449.  
  2450.           Primitive attributes are global over all structures and are not
  2451.           affected by any structure function. Deleting a primitive from a
  2452.           structure, for example, does not affect the attributes of any
  2453.           previous or subsequent primitives in the structure.
  2454.  
  2455.           SET LINE STYLE
  2456.  
  2457.  
  2458.           Initialize the current setting for the line style primitive
  2459.           attribute to the specified value. Subsequent primitives, except
  2460.           for markers and text, are initialized with this value.
  2461.  
  2462.  
  2463.               void cg_set_line_style (style)
  2464.  
  2465.               t_line_style  style  Style to use for subsequent primitives
  2466.  
  2467.  
  2468.           Enumerated values are defined for 6 line styles. An error will
  2469.           result if a value outside of this range is used.
  2470.  
  2471.           Primitive attributes are global over all structures and are not
  2472.           affected by any structure function. Deleting a primitive from a
  2473.           structure, for example, does not affect the attributes of any
  2474.           previous or subsequent primitives in the structure.
  2475.  
  2476.           SET LINE WIDTH
  2477.  
  2478.  
  2479.           Initialize the current setting for the line width primitive
  2480.           attribute to the specified value. Subsequent primitives, except
  2481.           for markers and text, are initialized with this value.
  2482.  
  2483.  
  2484.               void cg_set_line_width (width)
  2485.  
  2486.               int  width  Width of subsequent primitives
  2487.  
  2488.  
  2489.           The specified value refers to pixel widths which are device
  2490.           specific. The width of the primitive may appear differently on
  2491.           graphic devices that support different resolutions.
  2492.  
  2493.           Primitive attributes are global over all structures and are not
  2494.           affected by any structure function. Deleting a primitive from a
  2495.           structure, for example, does not affect the attributes of any
  2496.           previous or subsequent primitives in the structure.
  2497.  
  2498.           SET STRING RESPONSE
  2499.  
  2500.  
  2501.           Initialize the current settings used to process a response of
  2502.           type STRING and identify the location to display the initial
  2503.           prompt during a request for input.
  2504.  
  2505.  
  2506.               void cg_set_string_response (echo_pt, echo_color,
  2507.                                            background_color)
  2508.  
  2509.               t_ndc_coord  echo_pt            Location to echo each typed
  2510.                                              character
  2511.               t_color      echo_color         Color for typed characters
  2512.               t_color      background_color  Color for erasure of characters
  2513.  
  2514.  
  2515.           During a request for input that allows a response class of
  2516.           STRING, each character that is entered from the keyboard is
  2517.           echoed on the screen at the location and using the color that is
  2518.           specified. Since input does not take place in a particular view,
  2519.           the characters can be echoed at any location in NDC space.
  2520.  
  2521.           As the user erases characters with the backspace key, they are
  2522.           erased from the screen using the background color. If the echo
  2523.           location crosses several views which have different background
  2524.           colors, the characters will not appear to erase even though they
  2525.           will not be contained in the response from REQUEST INPUT. The
  2526.           echo location should be designed to be in a separate area of the
  2527.           screen, completely contained in a single view, or used across
  2528.           several views that share a common background color.
  2529.  
  2530.           The echo location is also used to display the initial prompt for
  2531.           each request for input.  The initial prompt should be used to
  2532.           identify the type of response that the user should enter, for
  2533.           example "Select point or enter coordinate". This example makes
  2534.           use of both a PICK response for the point or a STRING response
  2535.           for the coordinate of the point. If the user entered the
  2536.           coordinate from the keyboard, each character in the response
  2537.           would be displayed immediately after the prompt and returned in
  2538.           the response buffer. The application is responsible for
  2539.           converting the characters in the response buffer into a valid
  2540.           coordinate.
  2541.  
  2542.           SET STRUCTURE HIGHLIGHT
  2543.  
  2544.  
  2545.           Mark a specified structure as to whether the primitives should be
  2546.           highlighted if selected during a request for input that allows
  2547.           primitives to be picked.
  2548.  
  2549.  
  2550.               void cg_set_structure_highlight (structure_name, highlight)
  2551.  
  2552.               char      structure_name[]  Name of the structure to change 
  2553.                                           highlight
  2554.               t_toggle  highlight         Either ON or OFF
  2555.  
  2556.  
  2557.           Each request for input of type PICK scans the visible, pickable
  2558.           structures that are posted to all open views. If during the scan,
  2559.           a primitive is found within a fixed tolerance of the graphic
  2560.           cursor, the primitive is returned in the request buffer as a
  2561.           valid pick. It is usually desirable for the primitive to be
  2562.           identified to verify to the user that the correct primitive was
  2563.           selected. Highlighting involves erasing and redrawing the picked
  2564.           primitive with a slight delay in between.
  2565.  
  2566.           A special case is made for structure reference and text
  2567.           primitives. Since structure references may contain large amounts
  2568.           of primitives or further nested structures, only the individual
  2569.           primitive within the referenced structure is highlighted and not
  2570.           the structure reference primitive itself. For text, only the
  2571.           individual character within the test string is highlighted.
  2572.  
  2573.           The default for each structure is to highlight the picked
  2574.           primitive.
  2575.  
  2576.           SET STRUCTURE PICKABILITY
  2577.  
  2578.  
  2579.           Mark a specified structure as to whether the primitives can be
  2580.           picked during a request for input.
  2581.  
  2582.  
  2583.               void cg_set_structure_pickability (structure_name, pickable)
  2584.  
  2585.               char      structure_name[]  Name of the structure to change
  2586.                                           pickability
  2587.               t_toggle  pickable            Either ON or OFF
  2588.  
  2589.  
  2590.           Each request for input of type PICK scans the visible, pickable
  2591.           structures that are posted to all views. If during the scan, a
  2592.           primitive is found within a fixed tolerance of the graphic
  2593.           cursor, the primitive is returned in the request buffer as a
  2594.           valid pick.
  2595.  
  2596.           The default for each structure is to allow the primitives to be
  2597.           picked.
  2598.  
  2599.           SET STRUCTURE VISIBILITY
  2600.  
  2601.  
  2602.           Turn the visibility of a structure on or off.
  2603.  
  2604.  
  2605.               void cg_set_structure_visibility (structure_name, visible)
  2606.  
  2607.               char      structure_name[]  Name of the structure to change
  2608.                                           visibility
  2609.               t_toggle  visible            Either ON or OFF
  2610.  
  2611.  
  2612.           Each structure is divided into a predefined number of classes
  2613.           that contain primitives of a certain type. A good way to imagine
  2614.           this is as a table where the columns are all the structures and
  2615.           the rows are the classes. Structure visibility affects an entire
  2616.           column and class visibility affects an entire row.
  2617.  
  2618.           Visibility provides for better viewing options. If a view becomes
  2619.           too cluttered, structures or classes of primitives can be turned
  2620.           off much like overlays in a textbook.
  2621.  
  2622.           The default for each structure is visible.
  2623.  
  2624.           SET TEXT COLOR
  2625.  
  2626.  
  2627.           Initialize the current setting for the text color primitive
  2628.           attribute to the specified value. Subsequent text primitives are
  2629.           initialized with this value.
  2630.  
  2631.  
  2632.               void cg_set_text_color (color)
  2633.  
  2634.               t_color  color  Color for subsequent text primitives
  2635.  
  2636.  
  2637.           Enumerated values are defined for the first 16 colors. The
  2638.           maximum number of colors supported is device specific. Additional
  2639.           colors may be passed to this function without error. Undetermined
  2640.           results will occur if the color value is not supported.
  2641.  
  2642.           Primitive attributes are global over all structures and are not
  2643.           affected by any structure function. Deleting a primitive from a
  2644.           structure, for example, does not affect the attributes of any
  2645.           previous or subsequent primitives in the structure.
  2646.  
  2647.           SET WINDOW
  2648.  
  2649.  
  2650.           Initialize the size of the window into World space that is
  2651.           associated with a view. The window is then mapped to the
  2652.           specified view on the graphic screen.
  2653.  
  2654.  
  2655.               void cg_set_window (view_name, length, height)
  2656.  
  2657.               char  view_name[]  Name of the view to change to window
  2658.               real  length         Length of the window in World coordinates
  2659.               real  height         Height of the window in World coordinates
  2660.  
  2661.  
  2662.           The window defines that portion of the World space that is mapped
  2663.           to the view. 
  2664.  
  2665.           When any view control function is applied to a view, the
  2666.           resultant window may not match the relative proportion of the
  2667.           view. Windows are always maintained with the same aspect ratio as
  2668.           the view to which they are applied. Windows are automatically
  2669.           adjusted such that more viewing range is provided than originally
  2670.           requested. After each view control function, the INQUIRE VIEW
  2671.           TRANSFORMATION function can be used to determine the exact window
  2672.           boundaries.
  2673.  
  2674.           For example, if the window is defined with a length of 10 units
  2675.           and a height of 7 units for a view whose aspect ratio is 0.5, the
  2676.           length will be adjusted to 14 units to match the aspect ratio.
  2677.           This increases the window area in World Space. The other option
  2678.           is to decrease the height to 5 units but, the window would not
  2679.           contain all of the desired area.
  2680.  
  2681.           The default window is defined with a width of 100 units and a
  2682.           height that varies depending on the height of the view.
  2683.  
  2684.           TERMINATE
  2685.  
  2686.  
  2687.           Terminate the CommonGraphics system.
  2688.  
  2689.  
  2690.               void cg_terminate (void)
  2691.  
  2692.  
  2693.           This function should be called before the application terminates.
  2694.           All memory areas are returned to the operating system. The
  2695.           graphics device is cleared and returned to the state is was in
  2696.           prior to the CommonGraphics session.
  2697.  
  2698.           UNPOST ALL FROM VIEW
  2699.  
  2700.  
  2701.           Remove all structures from the list of structures to be displayed
  2702.           in a specified view. 
  2703.  
  2704.  
  2705.               void cg_unpost_all_from_view (view_name)
  2706.  
  2707.               char  view_name[]  Name of the view to unpost all structures
  2708.  
  2709.  
  2710.           The contents of a structure are visible only if the structure is
  2711.           posted to a view or referenced by a structure that is posted to a
  2712.           view, the primitive is within the window of World space
  2713.           associated with the posted view, the visibility of the structure
  2714.           is ON and the visibility of the class in which primitive is added
  2715.           is ON.
  2716.  
  2717.           UNPOST FROM ALL VIEWS
  2718.  
  2719.  
  2720.           Remove a specified structure from the list of structures to be
  2721.           displayed in all views.
  2722.  
  2723.  
  2724.               void cg_unpost_from_all_views (structure_name)
  2725.  
  2726.               char  structure_name[]  Name of the structure to unpost from
  2727.                                       all views
  2728.  
  2729.  
  2730.           The contents of a structure are visible only if the structure is
  2731.           posted to a view or referenced by a structure that is posted to a
  2732.           view, the primitive is within the window of World space
  2733.           associated with the posted view, the visibility of the structure
  2734.           is ON and the visibility of the class in which primitive is added
  2735.           is ON.
  2736.  
  2737.           UNPOST STRUCTURE FROM VIEW
  2738.  
  2739.  
  2740.           Remove a specified structure from the list of structures to be
  2741.           displayed in a specified view.
  2742.  
  2743.  
  2744.               void cg_unpost_structure_from_view (view_name, structure_name)
  2745.  
  2746.               char  view_name[]        Name of the view to unpost the structure
  2747.               char  structure_name[]  Name of the structure to unpost
  2748.  
  2749.  
  2750.           The contents of a structure are visible only if the structure is
  2751.           posted to a view or referenced by a structure that is posted to a
  2752.           view, the primitive is within the window of World space
  2753.           associated with the posted view, the visibility of the structure
  2754.           is ON and the visibility of the class in which primitive is added
  2755.           is ON.
  2756.  
  2757.           ZOOM
  2758.  
  2759.  
  2760.           Change the size of the window into World space that is associated
  2761.           with a view.
  2762.  
  2763.  
  2764.               void cg_zoom (view_name, window_ll, window_ur)
  2765.  
  2766.               char           view_name[]  Name of the view to change the
  2767.                                           window
  2768.               t_world_coord  window_ll      Lower left corner of window
  2769.               t_world_coord  window_ur      Upper right corner of window
  2770.  
  2771.  
  2772.           If the specified area is smaller than the current window, the
  2773.           visual effect will appear to zoom in, with the graphics currently
  2774.           in the view appearing larger. If the area is larger, the visual
  2775.           effect will appear to zoom out, with the graphics appearing
  2776.           smaller. With a zoom out, since the window has increased, it is
  2777.           likely that more primitives will be included in the view.
  2778.  
  2779.           When any view control function is applied to a view, the
  2780.           resultant window may not match the relative proportion of the
  2781.           view. Windows are always maintained with the same aspect ratio as
  2782.           the view to which they are applied. Windows are automatically
  2783.           adjusted such that more viewing range is provided than originally
  2784.           requested. After each view control function, an inquiry can be
  2785.           used to determine the exact window boundaries.
  2786.  
  2787.           For example, if the window is defined with a length of 10 units
  2788.           and a height of 7 units for a view whose aspect ratio is 0.5, the
  2789.           length will be adjusted to 14 units to match the aspect ratio.
  2790.           This increases the window area in World Space. The other option
  2791.           is to decrease the height to 5 units but, the window would not
  2792.           contain all of the desired area.
  2793.  
  2794.                                                      Programming Techniques
  2795.  
  2796.  
  2797.  
  2798.  
  2799.  
  2800.  
  2801.           This example application shows the basics of using
  2802.           CommonGraphics. How is the graphics session initiated? How is it
  2803.           closed? How are structures created and posted? How are primitives
  2804.           and primitive attributes specified? 
  2805.  
  2806.             #include <stdio.h>
  2807.             #include "cg.h"
  2808.  
  2809.             void main (void);
  2810.  
  2811.             t_world_coord            end_pt        = {24.25, 10.0};
  2812.             t_world_coord            start_pt      = {-10.0, 10.0};
  2813.             t_world_coord            viewport_ll   = {0.0, 0.0};
  2814.             t_world_coord            viewport_ur   = {1.0, 1.0};
  2815.  
  2816.             void main ()
  2817.  
  2818.             {
  2819.               t_name_set               allowed_classes;
  2820.               t_name_set               allowed_responses;
  2821.               struct t_device          device_params;
  2822.               struct t_request_buffer  pick_buffer;
  2823.  
  2824.               /*  Initialize the graphics session. Change the upper      */
  2825.               /*  corner of the view to the maximum  NDC range for the   */
  2826.               /*  graphics device.                                       */
  2827.  
  2828.               cg_initialize ();
  2829.               cg_inquire_workstation (&device_params);
  2830.  
  2831.               viewport_ur[1] = device_params.aspect_ratio;
  2832.  
  2833.               /*  Build the device class name set. Allow only PICK or    */
  2834.               /*  LOCATE classes.                                        */
  2835.  
  2836.               allowed_classes = 0;
  2837.               cg_add_name_to_set (&allowed_classes, LOCATE);
  2838.               cg_add_name_to_set (&allowed_classes, PICK);
  2839.  
  2840.               /*  Build the primitive response name set. Allow only      */
  2841.               /*  LINEs to be picked.                                    */
  2842.  
  2843.               allowed_responses = 0;
  2844.               cg_add_name_to_set (&allowed_responses, LINE);
  2845.              
  2846.               /*  Change some of the attributes. All attributes have     */
  2847.               /*  defaults and do not have to be explicitly set by the   */
  2848.               /*  program. Attributes also span structures which means   */
  2849.               /*  that they do not have to be defined each time a        */
  2850.               /*  structure is opened.                                   */      */
  2851.  
  2852.               cg_set_line_color (CYAN);
  2853.               cg_set_line_width (2);
  2854.  
  2855.               /*  Open a retained structure and add a line. At this      */
  2856.               /*  point, the line is not visible as the structure has    */
  2857.               /*  not been posted to a view.                             */
  2858.  
  2859.               cg_open_structure ("STRUCTURE1");
  2860.  
  2861.               cg_draw_line (start_pt, end_pt);
  2862.  
  2863.               /*  Open the view and adjust the window so the line        */
  2864.               /*  appears larger. CommonGraphics changes the window to   */
  2865.               /*  conform to the aspect ratio of the view. Setting the   */
  2866.               /*  the view without first posting the structure           */
  2867.               /*  eliminates the flicker caused by the view being        */
  2868.               /*  displayed and immediately redrawn to reflect the new   */
  2869.               /*  window.                                                */
  2870.  
  2871.               cg_open_view ("VIEW1", viewport_ll, viewport_ur, BLACK, BOX_BORDER);
  2872.  
  2873.               cg_set_window ("VIEW1", 400.0, 300.0);
  2874.  
  2875.               cg_post_structure_to_view ("STRUCTURE1", "VIEW1");
  2876.  
  2877.               /*  At this point the line is visible and, since it was    */
  2878.               /*  created as a retained structure and the LINE           */
  2879.               /*  primitive is included in the name set of allowed       */
  2880.               /*  responses, the line may be selected.                   */
  2881.  
  2882.               cg_request_input (allowed_classes, allowed_responses, "", &pick_buffer);
  2883.  
  2884.               /*  Examine the element that was picked to verify that it  */
  2885.               /*  was the line.                                          */
  2886.  
  2887.               if (pick_buffer.type == PICK)
  2888.               {
  2889.                  if (pick_buffer.v.pick.element.type == LINE)
  2890.                     printf ("\n   A line was picked\n");
  2891.                  else
  2892.                     printf ("\n   Error\n");
  2893.               }
  2894.               else
  2895.                  printf ("\n   A line was not picked\n");
  2896.  
  2897.               /*  One of the print messages is now visible. Wait for     */
  2898.               /*  confirmation.                                          */
  2899.  
  2900.               cg_request_input (allowed_classes, allowed_responses, "", &pick_buffer);
  2901.  
  2902.               cg_terminate ();
  2903.             }
  2904.  
  2905.                                                                Quick Reference
  2906.  
  2907.  
  2908.  
  2909.  
  2910.  
  2911.  
  2912.           Control
  2913.  
  2914.             initialize (void)
  2915.             terminate (void)
  2916.             dump (void)
  2917.  
  2918.           Primitive attribute
  2919.  
  2920.             set element identifier (identifier)
  2921.             set interior style (interior style)
  2922.             set line color (color)
  2923.             set line style (line style)
  2924.             set line width (width)
  2925.             set text color (color)
  2926.  
  2927.           Primitive
  2928.  
  2929.             draw arc (center point, start angle, end angle, rotation angle)
  2930.             draw arrow (tip point, length, height, rotation angle)
  2931.             draw bspline (number of points, point array)
  2932.             draw circle (center point, radius)
  2933.             draw ellipse (center point, x_radius, y_radius, rotation angle)
  2934.             draw line (start point, end point)
  2935.             draw marker (marker style, center point)
  2936.             draw polyline (marker style, connect, number of points,
  2937.                            point array)
  2938.             draw rectangle (center point, length, height, corner radius,
  2939.                             rotation angle)
  2940.             draw text (STRING/STROKE, lower left point, string, cell height,
  2941.                       cell width, rotation angle)
  2942.  
  2943.           Input
  2944.  
  2945.             add all names to set (&name set, value)
  2946.             add name to set (&name set)
  2947.             remove name from set (&name set, value)
  2948.             request input (input class set, primitive set, prompt,
  2949.                            &request buffer)
  2950.             set string response (echo location, echo color,
  2951.                                  echo background color)
  2952.  
  2953.           Structure
  2954.  
  2955.             open structure (structure name)
  2956.             open non retained structure (structure name)
  2957.             close structure (structure name)
  2958.             delete structure (structure name)
  2959.             delete all structures (void)
  2960.             empty structure (structure name)
  2961.             change structure name (old structure name, new structure name)
  2962.             reference structure (structure name, translation, angle, scale)
  2963.             set structure visibility (structure name, ON/OFF)
  2964.             set structure pickability (structure name, ON/OFF)
  2965.             set structure highlight (structure name, ON/OFF)
  2966.  
  2967.           View
  2968.  
  2969.             open view  (view name, lower left viewport, upper right viewport,
  2970.                         background color, border style)
  2971.             close view (view name)
  2972.             delete view (view name)
  2973.             delete all views (void)
  2974.             post all to view (view name)
  2975.             post structure to view (structure name, view name)
  2976.             post to all views (view name)
  2977.             set class visibility (view name, class, ON/OFF)
  2978.             unpost all from view (structure name)
  2979.             unpost from all views (view name)
  2980.             unpost structure from view (structure name, view name)
  2981.  
  2982.           View Control
  2983.  
  2984.             pan (view name, center point)
  2985.             set window (view name, length, height)
  2986.             zoom (view name, lower left point, upper right point)
  2987.  
  2988.           Edit
  2989.  
  2990.             delete element (element identifier)
  2991.             delete element range (element identifier, element identifier)
  2992.             change reference name (structure name, element identifier,
  2993.                                    old structure name, new structure name)
  2994.             change reference abs (structure name, reference name,
  2995.                                   element identifier, translation, angle,
  2996.                                   scale)
  2997.             change reference rel (structure name, reference name,
  2998.                                   element identifier, translation, angle,
  2999.                                   scale)
  3000.  
  3001.           Inquiry
  3002.  
  3003.             inquire class visibility (view name, class, &visible)
  3004.             inquire name set (name set, &value)
  3005.             inquire open structure (structure name)
  3006.             inquire pick list (FIRST/NEXT, pick primitive)
  3007.             inquire primitive attributes (¤t attribute settings)
  3008.             inquire string response (echo location, &echo color,
  3009.                                      &echo background color)
  3010.             inquire structures (FIRST/NEXT, structure name)
  3011.             inquire structure exists (structure name)
  3012.             inquire structure visibility (structure name, &visible)
  3013.             inquire structures posted to view (FIRST/NEXT, view name,
  3014.                                                structure name)
  3015.             inquire views (FIRST/NEXT, view name)
  3016.             inquire view attributes (view name, &color, &border style)
  3017.             inquire view exists (view name)
  3018.             inquire view transformation (view name, lower left viewport,
  3019.                                          upper right viewport,
  3020.                                          lower left window,
  3021.                                          upper right window)
  3022.             inquire workstation (&device attributes)
  3023.  
  3024.                                                                 Error Messages
  3025.  
  3026.  
  3027.  
  3028.  
  3029.  
  3030.  
  3031.           At least 2 points must be specified for a POLYLINE
  3032.  
  3033.                 A POLYLINE primitive must consist of at least 3 points.
  3034.                 Use a LINE primitive in all other cases.
  3035.  
  3036.           At least 4 points must be specified for a BSPLINE curve
  3037.  
  3038.                 A BSPLINE primitive must consist of at least 4 points. 
  3039.  
  3040.           Attempt to add a primitive with no open structure
  3041.  
  3042.                 A structure has not been opened prior to a primitive being
  3043.                 drawn.
  3044.  
  3045.           Cannot open CommonGraphics error file
  3046.  
  3047.                 The file CG.ERR contains all error messages and the result
  3048.                 of the DUMP function. The file was not able to be opened
  3049.                 when an error was detected or when the DUMP function was
  3050.                 called.
  3051.  
  3052.           Error limit for a circular arc exceeded
  3053.           Error limit for an ellipse exceeded
  3054.  
  3055.                 An optimization is performed when drawing arcs and
  3056.                 ellipses based on the window and view sizes. This
  3057.                 optimization can fail if the window is exceedingly large
  3058.                 and the corresponding viewport is very small. Adjusting
  3059.                 either of these values should correct the error.
  3060.  
  3061.           Incorrect use of <function name>
  3062.  
  3063.                 Inquiry functions that require a selection of FIRST or
  3064.                 NEXT must be used with the FIRST selection before the NEXT
  3065.                 selection.
  3066.  
  3067.           Invalid <parameter> specified in DRAW <primitive>
  3068.  
  3069.                 The function identified in the error was not passed a
  3070.                 correct value.
  3071.  
  3072.           Invalid response returned from device
  3073.  
  3074.                 This is an internal error. The low-level device function
  3075.                 should only return a SCREEN or STRING device class in
  3076.                 response to a request for input. Determining whether a
  3077.                 selection is a PICK, LOCATE or SCREEN must be performed by
  3078.                 CommonGraphics.
  3079.  
  3080.           Marker specified in <function name> not supported
  3081.  
  3082.                 The specified marker style is not supported.
  3083.  
  3084.           String truncated -
  3085.  
  3086.                 The character strings used with either a structure, text
  3087.                 primitive or view must be less than 20, 80 and 20
  3088.                 characters, respectively.
  3089.  
  3090.           Structure in CLOSE STRUCTURE is not open
  3091.  
  3092.                 The structure is not currently open so it cannot be
  3093.                 closed.
  3094.  
  3095.           Structure in CHANGE STRUCTURE NAME already exists
  3096.  
  3097.                 The new name for the structure already exists.
  3098.  
  3099.           Structure in <function name> does not exist
  3100.  
  3101.                 The structure does not exist.
  3102.  
  3103.           STRUCTURE HIGHLIGHT must be ON or OFF
  3104.           STRUCTURE PICKABILITY must be ON or OFF
  3105.           STRUCTURE VISIBILITY must be ON or OFF
  3106.  
  3107.                 The value must be either ON or OFF
  3108.  
  3109.           Style used in <function name> not supported
  3110.  
  3111.                 The style passed to the identified function is not
  3112.                 supported.
  3113.  
  3114.           The values for SET WINDOW must be greater than zero
  3115.  
  3116.                 The length and width of the window must be greater than
  3117.                 zero.
  3118.  
  3119.           The corners specified in OPEN VIEW are out of range
  3120.  
  3121.                 The lower left or upper right corners of the view are not
  3122.                 valid NDC locations or the y-coordinate is outside the
  3123.                 range of the visible screen. The maximum y-coordinate can
  3124.                 be determined after CommonGraphics has been initialized by
  3125.                 using the INQUIRE WORKSTATION function.
  3126.  
  3127.           The corners specified in ZOOM are the same point
  3128.  
  3129.                 The window corner locations cannot be the same point. This
  3130.                 would define a zero-length window.
  3131.  
  3132.           Unable to allocate <name>
  3133.  
  3134.                 Not enough memory. In the case of not being able to
  3135.                 allocate a structure, CommonGraphics still closes the
  3136.                 currently open structure. This may result in a cascade of
  3137.                 errors as subsequent primitives cannot be added to a
  3138.                 structure.
  3139.  
  3140.           Value out of range in name set.
  3141.  
  3142.                 The device class or primitive specified in ADD NAME TO SET
  3143.                 or REMOVE NAME FROM SET is out of range.
  3144.  
  3145.           Video adapter not supported
  3146.  
  3147.                 A video adapter was detected during initialization that is
  3148.                 not supported.
  3149.  
  3150.           View in <function name> does not exist
  3151.  
  3152.                 The view does not exist.
  3153.  
  3154.           Zero length line not valid in DRAW LINE
  3155.  
  3156.                 The start and end points for the line cannot represent the
  3157.                 same point.
  3158.  
  3159.